Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.21;
Скачать: CL | DM;

Вниз

Вращение   Найти похожие ветки 

 
Newss   (2008-08-07 15:17) [0]

Здравствуйте.
Подскажите, пожалуйста, как вращать прямоугольник вокруг своего центра. Прямоугольник задается своей диагональю, то есть известны точки (х1, у1) и (х2, у2).  
Спасибо.


 
stas ©   (2008-08-07 15:25) [1]

тригонометрия. В зависимости от градуса вычисляешь координаты точек.


 
Newss   (2008-08-07 15:32) [2]

Вот меня как раз и интересует, как вычислять координаты точек. Вот так не работает:

   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));

В этом случае прямоугольник при каждом клике, вместо того чтобы поворачиваться, смещается немного вниз и влево.


 
Johnmen ©   (2008-08-07 15:32) [3]


>  Прямоугольник задается своей диагональю, то есть известны
> точки (х1, у1) и (х2, у2).  

Спасибо. Поржал.


 
stas ©   (2008-08-07 15:35) [4]

x2:=xx-
y2=yy-


 
DVM ©   (2008-08-07 15:45) [5]


> Newss   (07.08.08 15:32) [2]


> В этом случае прямоугольник при каждом клике, вместо того
> чтобы поворачиваться, смещается немного вниз и влево.

А как ты его рисуешь, можешь показать?


 
Newss   (2008-08-07 15:51) [6]

сначала рисую его белым цветом по старым координатам, а затем, после расчета новых координат, рисую прямоугольник по ним черным цветом. Использую стандартную процедуру Image.Canvas.Rectangle(x1,y1,x2,y2);


 
stas ©   (2008-08-07 15:52) [7]

Newss   (07.08.08 15:51) [6]
сначала рисую его белым цветом по старым координатам,
Лучше рисуй на другой канве, а потом перерисовую канву. Мерцать не будет.


 
Сергей М. ©   (2008-08-07 16:27) [8]


> Использую стандартную процедуру Image.Canvas.Rectangle(x1,
> y1,x2,y2)


Этот метод не рисует "повернутые" прямоугольники.


 
DVM ©   (2008-08-07 16:40) [9]


> Newss   (07.08.08 15:51) [6]


> стандартную процедуру Image.Canvas.Rectangle(x1,y1,x2,y2);

Я так и думал. Используй canvas.Polygon();


 
{RASkov} ©   (2008-08-07 17:41) [10]

> Этот метод не рисует "повернутые" прямоугольники.

Не зря в кавычках :)
Так как и этим методом можно "повернуть"... Т.е. крутить можно канву, а рисовать данным методом....
ModifyWorldTransform


 
_Milk   (2008-08-07 17:56) [11]

Большая "куча" советов, но почему-то никто не прокомментировал (или не понял) > Johnmen ©   (07.08.08 15:32) [3]
> Спасибо. Поржал.
О каком вращении прямоугольника может идти речь, если через диагональ их можно задать бесчисленное множество (все вершины которых располагаются на полуокружности, у которой эта диагональ является диаметром)


 
McSimm ©   (2008-08-07 18:07) [12]


> все вершины которых располагаются на полуокружности, у которой
> эта диагональ является диаметром

Мне эту фразу было понять труднее, чем догадаться что имел в виду автор и как расположен у него прямоугольник :)


 
_Milk   (2008-08-07 18:12) [13]

> > все вершины которых располагаются на полуокружности, у
> которой эта диагональ является диаметром

это значит, что все углы из этой серии будут прямыми:)


 
antonn ©   (2008-08-07 18:23) [14]


> Johnmen ©   (07.08.08 15:32) [3]
>
>
> >  Прямоугольник задается своей диагональю, то есть известны
> > точки (х1, у1) и (х2, у2).  
>
> Спасибо. Поржал.

Пожалуйста. Заходите еще.


> О каком вращении прямоугольника может идти речь, если через
> диагональ их можно задать бесчисленное множество (все вершины
> которых располагаются на полуокружности, у которой эта диагональ
> является диаметром)
>

диагональю задается исходный прямоугоник, не повернутый, неужели не ясно?


 
_Milk   (2008-08-07 18:29) [15]

> диагональю задается исходный прямоугоник, не повернутый,
>  неужели не ясно?</
I>
Представляешь себе не ясно:(. А не могут ли быть быть эти координаты, координатами диагонали, в частности, квадрата?
Вы когда и в какой школе учились (из анкеты это не понятно):)?


 
{RASkov} ©   (2008-08-07 18:33) [16]

> Представляешь себе не ясно:(.

> Прямоугольник задается своей диагональю, то есть известны точки (х1, у1) и (х2, у2).  

Данной диагональю можно и повернутый прямоугольник обозначить...
Чего здесь странного?
Вот [6] и описание в [0] - действительно немного глупо...


 
McSimm ©   (2008-08-07 18:38) [17]


> _Milk   (07.08.08 18:12) [13]

это понятно, я не сразу смог мысленно представить прямоугольник, все вершины которого на полуокружности.

А вопрос автора, как и его ошибку в формулировке - понял как-то сразу.


 
_Milk   (2008-08-07 18:38) [18]

> {RASkov} ©   (07.08.08 18:33) [16]
Глупо в первую очередь то, что прямоугольник невозможно задать координатами его диагонали см.
> > Johnmen ©   (07.08.08 15:32) [3] > > Спасибо. Поржал.

И попробуй > если через диагональ их можно задать бесчисленное множество (все вершины которых располагаются на полуокружности, у
> которой эта диагональ является диаметром)


 
Юрий Зотов ©   (2008-08-07 18:55) [19]

> _Milk   (07.08.08 18:38) [18]

> Глупо в первую очередь то, что прямоугольник невозможно задать
> координатами его диагонали

Жаль, что изобретатели типа TRect об этом не знали, правда? А то бы они такую глупость ни за что не сделали. И как только она до сих пор работает - непонятно, да?


 
{RASkov} ©   (2008-08-07 19:05) [20]

> [18] _Milk   (07.08.08 18:38)
> Глупо в первую очередь то, что прямоугольник невозможно
> задать координатами его диагонали

А как же метод Rectangle? Разве там не диагональ указывается?)
С поворотом прямоугольника сложнее, но опять же.... так же можно задать тот самый повернутый прямоугольник - диагональю, с учетом угла поворота....


 
DVM ©   (2008-08-07 19:12) [21]

Прямоугольник на координатной плоскости можно задать его диагональю только в том случае, если его стороны параллельны осям координат. Во всех остальных случаях прямоугольников с данной диагональю будет бесконечно много.


 
Юрий Зотов ©   (2008-08-07 19:18) [22]

Подожду, когда эту ветку перенесут в потрепаловку, потом подожду, пока на ней не нарастет штук 500 постов, а потом сохраню, как образец мышления программистов, которые, ложась спать, ставят на тумбочку 2 стакана.


 
_Milk   (2008-08-07 19:22) [23]

> Юрий Зотов ©   (07.08.08 18:55) [19]
> Жаль, что изобретатели типа TRect об этом не знали, правда?
Я мало знаком с "изобретателями типа TRect", я учился в обычной школе, изучал геометрию.
"Нарисуйте" мне, пожалуйста, функцию (процедуру), которая даст мне координаты вершин этого прямоугольника (заданного координатами его диагонали - совсем необязательно чтобытам присутствовали: x1, x2, y1, y2).

> {RASkov} ©   (07.08.08 19:05) [20]
> А как же метод Rectangle? Разве там не диагональ указывается?> )
А я, собственно, не про Rectangle, я про прямоугольник

Неужели все заказчики обязаны знать "изобретателей типа TRect" и о существовании "Rectangle"?


 
_Milk   (2008-08-07 19:25) [24]

> Юрий Зотов ©   (07.08.08 19:18) [22]
Если бы кто-то другой так запостил, я бы не удивился.
> как образец мышления программистов
А при чем тут программисты ... :(


 
{RASkov} ©   (2008-08-07 19:28) [25]

> [22] Юрий Зотов ©   (07.08.08 19:18)

:)
> Прямоугольник на координатной плоскости можно задать его
> диагональю только в том случае, если его стороны параллельны
> осям координат.

Во-во.... а они могут быть как раз всегда параллельны осям.... только оси-то как раз и вертеть :)


> [23] _Milk   (07.08.08 19:22)
> А я, собственно, не про Rectangle, я про прямоугольник

Смешно как-то
And I, actually, not about Прямоугольник, I about a rectangle
:о)


 
DVM ©   (2008-08-07 19:32) [26]

Кстати, насчет типа TRect (и подобного метода) для задания прямоугольника диагональю.
Работал я тут как то над некоторым подобием векторного редактора. Так вот один из классов там как раз был класс, представляющий собой прямоугольник. И его ранее (до меня кто-то) решил задавать именно диагональю. Потом наплодили наследников и т.д. Мне понадобилось добавить метод поворота. Но из-за того что прямоугольник был задан только двумя вершинами вместо четырех пришлось переписывать кучу кода (до сих пор не переписал еще все).


 
DVM ©   (2008-08-07 19:33) [27]


> {RASkov} ©   (07.08.08 19:28) [25]


> Во-во.... а они могут быть как раз всегда параллельны осям.
> ... только оси-то как раз и вертеть :)

Только крайне неудобно это. Координаты то надо задавать относительно нового положения этих самых осей. Ненаглядно это.


 
{RASkov} ©   (2008-08-07 19:38) [28]

> [27] DVM ©   (07.08.08 19:33)
> Только крайне неудобно это.

Да брось ты это...)
Мы тут об жирном в [18]
:о)


 
Юрий Зотов ©   (2008-08-07 19:39) [29]

> _Milk   (07.08.08 19:25) [24]

> при чем тут программисты

Не все (к счастью). А только те, которые, ложась спать, ставят на тумбочку 2 стакана. Один с водой (на случай, если ночью захочется пить), а другой пустой (на случай, если пить не захочется). Сорри за баян, но приходится.

Они тут при том, что мыслят исключительно терминами двочными (ноль-единица, да-нет...). Если, например, такому программисту сказать, что лошади едят траву, то он сразу ответит, что высказывание некорректно. Потому что лошади едят не всякую траву, потому что спящие лошади траву не едят и т.п.

Любому нормальному человеку все это понятно и без дополнительных уточнений, как понятен и смысл высказывания. Но только не двоичному программисту. Ему обязательно нужна однозначная булевская функция, возвращающая результат типа "а ест ли данная лошадь в данный момент времени данную траву". Без нее - никак.

Вот и в данном случае - всем, кроме двоичных программистов, совершенно понятно, что имел в виду автор вопроса.


 
antonn ©   (2008-08-07 19:45) [30]


> А не могут ли быть быть эти координаты, координатами диагонали,
>  в частности, квадрата?

каждый квадрат - прямоугольник, и что?


> Глупо в первую очередь то, что прямоугольник невозможно
> задать координатами его диагонали см.

при задании неких условий - можно. Например пояснить, что прямоугольник не повернут, его стороны параллельны/перпендикулярны координатам (декартовым, дабы некоторые по недоразумению не попытались в сферических координатах это представить и не перегрузили себе сохзнание).


> Юрий Зотов ©   (07.08.08 19:39) [29]

к сожалению все больше хороших людей начинают принимать именно такую "однозначную философию", не знаю, может от скуки... :(


 
@!!ex ©   (2008-08-07 19:49) [31]

> > Юрий Зотов ©   (07.08.08 18:55) [19]
> > Жаль, что изобретатели типа TRect об этом не знали, правда?
>
> Я мало знаком с "изобретателями типа TRect", я учился в
> обычной школе, изучал геометрию.
> "Нарисуйте" мне, пожалуйста, функцию (процедуру), которая
> даст мне координаты вершин этого прямоугольника (заданного
> координатами его диагонали - совсем необязательно чтобытам
> присутствовали: x1, x2, y1, y2).
>
> > {RASkov} ©   (07.08.08 19:05) [20]
> > А как же метод Rectangle? Разве там не диагональ указывается?
> > )
> А я, собственно, не про Rectangle, я про прямоугольник
>
> Неужели все заказчики обязаны знать "изобретателей типа
> TRect" и о существовании "Rectangle"?

Здесь форум программистов. ку? Для программирования, а точнее для программирования графики на Кэнвасе, задание прямоугольника его диагональю - это общепринятый подход, и чем вы так удивилсь - непонятно.
Заказчики общаются в других местах.


 
DVM ©   (2008-08-07 19:52) [32]

Если бы в условии задачи не было упомянуто вращение, то вряд ли бы кто был против задания прямоугольника диагональю.


 
DVM ©   (2008-08-07 19:55) [33]

Да и в постановке задачи вообще не указано, что прямоугольник расположен на экране или тем более канве.


 
{RASkov} ©   (2008-08-07 20:05) [34]

Да, вопрос поставлен не однозначно - это ошибка автора вопроса и из-за его ошибки и разрослась данная ветка....
Лично я вопрос понял так:
Изначально задан прямоугольник координатами (х1, у1) и (х2, у2).
Затем его нужно вращать. Но (х1, у1) и (х2, у2) и метод Rectangle тут уже как бы ни при чем...
Вроде бы чего тут не ясного? Причем в голове он крутился именно на канве)
Но можно и по другому понять вопрос.... я не говорю, что мое понимание и есть верное в данной ветке...
Ладно, я больше тут не учавствую... по крайней мере постараюсь воздержаться
Но чувствую, что ветка не жилец.... на крайняк в трепаловку ее... Хотя и там ей нет смысла быть...
:о)


 
Юрий Зотов ©   (2008-08-07 20:06) [35]

> DVM ©   (07.08.08 19:52) [32]

И даже при вращении - тоже. Ведь вращение - это поворот на определенный угол, а величина угла всегда задается относительно какого-то направления и не может быть задана никак иначе. По умолчанию таким направлением принято считать положительное направление горизонтальной оси.

Поэтому в задании исходного пямоугольника, помимо координат диагонали, неявно присутствует третий параметр - то самое дефолтное направление.

Причем именно тогда, когда речь идет о вращении, исходное направление не присутствовать просто не может. Иначе не будет никаких углов и никаких поворотов.


 
Johnmen ©   (2008-08-07 20:19) [36]


> Юрий Зотов ©   (07.08.08 19:39) [29]
> Вот и в данном случае - всем, кроме двоичных программистов, совершенно
> понятно, что имел в виду автор вопроса.

Спасибо, что открыл мне глаза на самого себя.

> antonn ©   (07.08.08 19:45) [30]
> не знаю, может от скуки... :(

Отчего же ещё? :)
Причем скука на дельфимастере...


 
stas ©   (2008-08-08 08:58) [37]

Развели не понятно что.
Если кому-то не понятен вопрос не вмешивайтесь.
Мне придельно ясно чего хочет автор.
Помоему в любом случае можно нарисовать прямоугольник заданный диагональю.
А трепаться только потому что не понятен вопрос или незнаешь на него ответа глупо темболее для мужиков и в таком возрасте.
Как бабы...


 
oldman ©   (2008-08-08 09:28) [38]


> stas ©   (08.08.08 08:58) [37]
> Помоему в любом случае можно нарисовать прямоугольник заданный
> диагональю.


Бесконечное множество прямоугольников.
Для одного неповторимого нужно еще знать угол между диагональю и стороной (любой из двух).


 
stas ©   (2008-08-08 09:32) [39]

Зачем?
всегда 90 градусов между диагональю и прилежащей к ней стороной.


 
stas ©   (2008-08-08 09:32) [40]

т.е. 45



Страницы: 1 2 вся ветка

Текущий архив: 2008.09.21;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.022 c
15-1217415402
Vlad Oshin
2008-07-30 14:56
2008.09.21
Скорее по администрированию. Как заставить ОС память всю есть?


4-1197096509
happy
2007-12-08 09:48
2008.09.21
Пост запрос


3-1206401557
Drowsy
2008-03-25 02:32
2008.09.21
MDX в DBF.


2-1218109791
Ябеда
2008-08-07 15:49
2008.09.21
Снова потоки


2-1218011223
kate158
2008-08-06 12:27
2008.09.21
генерация id в xml файле