Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.008 c
3-1205663074
Kolan
2008-03-16 13:24
2008.09.21
Как проапдейтить строку, а если её нет, то вставить?


15-1217147572
Пётр_Ф
2008-07-27 12:32
2008.09.21
Как вывести всем в сети ярлык на рабочий стол?


2-1218439126
Нов_и_чок
2008-08-11 11:18
2008.09.21
Из ASCII в ANSI


6-1189334897
Tramal
2007-09-09 14:48
2008.09.21
Как убрать все HTML теги


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский