Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 15:33   #1
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию Графика Делфи

1. Можно ли повернуть прямоугольник, нарисованный канвой на форме на любой угол. Или даже сначала повернуть, а потом вывести?
2. Как позиционировать прямоугольник по его центру, а не по левому верхнему углу? С учетом того, что он повернут на определенный угол, т.е. поворачивать прямоугольник относительно его центра.

P.S. прямоугольник неизвестного заранее размера. лучше примерчик кода
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 04.01.2011, 15:38   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Ходят слухи, что можно. Для начала опиши поворот математически на листочке... а перевести в код это без проблем.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 04.01.2011, 15:40   #3
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Valio Посмотреть сообщение
Ходят слухи, что можно. Для начала опиши поворот математически на листочке... а перевести в код это без проблем.
А по-подробнее про листочек, это как? С тригонометрией я не в ладах
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 04.01.2011, 15:45   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Ну листочек это просто листочек
Тетрадный листочек, формата А4 дял принтера и пр.
Взять ручку и подумать как можно вычислить координаты точек при повороте.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 04.01.2011, 15:46   #5
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

1) Гугли: "Матрица поворота". Можно из википедии.
2) То же самое только поворачивать будешь относительно центра.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 04.01.2011, 16:00   #6
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Selestis Посмотреть сообщение
1) Гугли: "Матрица поворота". Можно из википедии.
2) То же самое только поворачивать будешь относительно центра.
А позиционировать по центру как, если заранее не известен размер? Что-то типа вот этого:
...
x:= 100;
y:= 100; //координаты центра
...
x1:= x div 2;
y1:= y div 2;
x2:= x1 + "73"; (например)
y2:= y2 + "5"; (например) //второй угол, ну здесь динамической переменной размер задать можно
...
//здесь считать "матрицу поворота"
...
Form6.Image1.Canvas.Rectangle(x1, y1,x2, y2);
...

Что-то не понял матрицу, там как считать вообще?
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 04.01.2011, 16:08   #7
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Есть у вас W,H - размер. Cx,Cy - центр. Alpha - угол поворота.
Ваш прямо-ик выглядит сначала так:
-_______
|---.----|
|_______|
Точка - центр. Есть 4 вершины, найти координаты которых ОТНОСИТЕЛЬНО центра элементарно. То есть есть 4 вектора от центра к вершине: A1x,A1y...A4x,A4y
Вот их-то и будем поворачивать по матрице поворота:
M=(cos(Alpha),-sin(Alpha),
sin(Alpha),cos(Alpha))
После трансформации эти вектора ессно изменятся и останется прибавить к позиции центра координаты этих векторов.

-/-\
/-.-\
\---/
-\-/

Ах да, Alpha:= - Alpha

И рисовать, разумеется, придётся уже не Rectangle, а набором линий.
Изобретатель велосипедов

Последний раз редактировалось Selestis; 04.01.2011 в 16:16.
Selestis вне форума Ответить с цитированием
Старый 04.01.2011, 16:13   #8
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Selestis Посмотреть сообщение
Вот их-то и будем поворачивать по матрице поворота:
M=(cos(Alpha),-sin(Alpha),
sin(Alpha),cos(Alpha))
Я формулу саму понять не могу Это так:
M=(cos(Alpha)-sin(Alpha) * sin(Alpha) * cos(Alpha)) ?
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 04.01.2011, 16:19   #9
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

M: array[1..2,1..2] of real;
M[1,1]:=cos(a);
M[1,1]:=-sin(a);
M[2,1]:=sin(a);
M[2,2]:=cos(a);

Вобщем-то это просто запись такая, можно и формулу сразу для координат вывести, но так проще. Хотя может вам и сложнее. Рискну предположить, что вам нужно посмотреть ещё материал про перемножение матрицы на вектор...

Впрочем, вот формулы координат:
a:=-a;
NewX:=x*cos(a)-y*sin(a);
NewY:=x*sin(a)+y*cos(a);
Изобретатель велосипедов

Последний раз редактировалось Selestis; 04.01.2011 в 16:23.
Selestis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графика в делфи Lena neznayka Помощь студентам 15 16.06.2010 10:08
Графика делфи Asira Помощь студентам 3 07.06.2010 14:07
графика в Делфи. pionerka Помощь студентам 5 28.04.2010 16:38
Графика в Делфи R_A_M_I_L7777777 Помощь студентам 14 27.03.2009 15:21
Графика в Делфи Killbrum Мультимедиа в Delphi 19 17.09.2008 22:29