Форум: "Начинающим";
Текущий архив: 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