![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вращение [D7, XP]
Newss © (2008-08-07 15:17:00)Здравствуйте.
Подскажите, пожалуйста, как вращать прямоугольник вокруг своего центра. Прямоугольник задается своей диагональю, то есть известны точки (х1, у1) и (х2, у2).
Спасибо.
_Milk (2008-08-07 17:56:00) [61]Большая "куча" советов, но почему-то никто не прокомментировал (или не понял) > Johnmen © (07.08.08 15:32) [3]
> Спасибо. Поржал.
О каком вращении прямоугольника может идти речь, если через диагональ их можно задать бесчисленное множество (все вершины которых располагаются на полуокружности, у которой эта диагональ является диаметром)
{RASkov} (2008-08-07 17:41:00) [62]> Этот метод не рисует "повернутые" прямоугольники.
Не зря в кавычках :)
Так как и этим методом можно "повернуть"... Т.е. крутить можно канву, а рисовать данным методом....
ModifyWorldTransform
DVM (2008-08-07 16:40:00) [63]
> Newss (07.08.08 15:51) [6]
> стандартную процедуру Image.Canvas.Rectangle(x1,y1,x2,y2);
Я так и думал. Используй canvas.Polygon();
Сергей М. (2008-08-07 16:27:00) [64]
> Использую стандартную процедуру Image.Canvas.Rectangle(x1,
> y1,x2,y2)
Этот методне рисует "повернутые" прямоугольники.
stas (2008-08-07 15:52:00) [65]Newss (07.08.08 15:51) [6]
сначала рисую его белым цветом по старым координатам,
Лучше рисуй на другой канве, а потом перерисовую канву. Мерцать не будет.
Newss (2008-08-07 15:51:00) [66]сначала рисую его белым цветом по старым координатам, а затем, после расчета новых координат, рисую прямоугольник по ним черным цветом. Использую стандартную процедуру Image.Canvas.Rectangle(x1,y1,x2,y2);
DVM (2008-08-07 15:45:00) [67]
> Newss (07.08.08 15:32) [2]
> В этом случае прямоугольник при каждом клике, вместо того
> чтобы поворачиваться, смещается немного вниз и влево.
А как ты его рисуешь, можешь показать?
stas (2008-08-07 15:35:00) [68]
x2:=xx-
y2=yy-
Johnmen (2008-08-07 15:32:00) [69]
> Прямоугольник задается своей диагональю, то есть известны
> точки (х1, у1) и (х2, у2).
Спасибо. Поржал.
Newss (2008-08-07 15:32:00) [70]Вот меня как раз и интересует, как вычислять координаты точек. Вот так не работает:
xx:=round(abs(P[i].x1-P[i].x2)/2); //вычисляем
yy:=round(abs(P[i].y1-P[i].y2)/2); //координаты центра
P[i].x1:=xx+round((P[i].x1-xx)*cos(0.1)-(P[i].y1-yy)*sin(0.1));
P[i].y1:=yy+round((P[i].x1-xx)*sin(0.1)+(P[i].y1-yy)*cos(0.1));
P[i].x2:=xx+round((P[i].x2-xx)*cos(0.1)-(P[i].y2-yy)*sin(0.1));
P[i].y2:=yy+round((P[i].y2-yy)*sin(0.1)+(P[i].y2-yy)*cos(0.1));
В этом случае прямоугольник при каждом клике, вместо того чтобы поворачиваться, смещается немного вниз и влево.
stas (2008-08-07 15:25:00) [71]тригонометрия. В зависимости от градуса вычисляешь координаты точек.