Форум: "Начинающим";
Текущий архив: 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
← →
stas © (2008-08-08 09:36) [41]А не гоню.
его знать ненужно т.к. между двумя сторонами всегда 90 градусов, по другому быть неможет.
← →
oldman © (2008-08-08 09:39) [42]
> stas © (08.08.08 09:32) [40]
> т.е. 45
Прямоугольник не является квадратом.
Иди в школу.
Спроси, сколько можно построить прямоугольных треугольников, зная длину гипотенузы.
Поразись ответу.
← →
stas © (2008-08-08 09:46) [43]oldman © (08.08.08 09:39) [42]
между двумя сторонами всегда 90 градусов, это не параллепипед.
← →
oldman © (2008-08-08 09:49) [44]
> stas © (08.08.08 09:46) [43]
> oldman © (08.08.08 09:39) [42]
> между двумя сторонами всегда 90 градусов
А в [37]
Помоему в любом случае можно нарисовать прямоугольник заданный диагональю.
Stas, разницу чуешь?
Вот нарисую я отрезок.
И попрошу тебя достроить прямоугольный треугольник так, чтоб этот отрезок являлся его гипотенузой.
Твои действия?
← →
stas © (2008-08-08 09:54) [45]
> Stas, разницу чуешь?
нет
>
> И попрошу тебя достроить прямоугольный треугольник так,
>
> чтоб этот отрезок являлся его гипотенузой.
Легко.
← →
oldman © (2008-08-08 09:56) [46]
> stas © (08.08.08 09:54) [45]
> Легко
И сколько таких треугольников можно построить?
← →
stas © (2008-08-08 10:03) [47]2.
← →
oldman © (2008-08-08 10:16) [48]
> stas © (08.08.08 10:03) [47]
> 2.
Это твоя отметка по геометрии.
Таких треугольников бесконечное множество.
← →
@!!ex © (2008-08-08 10:17) [49]> [47] stas © (08.08.08 10:03)
Почему? Бесконечное множество можно построить.
C^2=A^2+B^2
С известна, A и B - нет. Уроавнение имеет бесконечное множество решений.
← →
Vlad Oshin © (2008-08-08 10:22) [50]
> oldman ©
эт ты Серега чет загнул
вообще не ясен смысл вопроса, вернее затруднения
1. Строим прямоугольник, описываем окружность,
2. двигаем любой отрезок(сторону прямоугольника) по окружности, (а фактически 2 точки двигаются)
3. противоположная сторона симметрична относительно центра (еще 2 точки)
4. соединяем точки.
5. goto 2.
← →
oldman © (2008-08-08 10:24) [51]
> Vlad Oshin © (08.08.08 10:22) [50]
> вообще не ясен смысл вопроса, вернее затруднения
> 1. Строим прямоугольник,
Вот здесь и затруднения, поскольку
"Прямоугольник задается своей диагональю, то есть известны точки (х1, у1) и (х2, у2)."
← →
stas © (2008-08-08 10:24) [52]oldman © (08.08.08 10:16) [48]
> Это твоя отметка по геометрии.
:-)))
1. как бы там нибыло так реагировать на вопрос тем более вветке "начинающим" нехорошо
2. oldman © (08.08.08 10:16) [48], @!!ex © (08.08.08 10:17) [49]
Заданы координаты (X1,Y1); (X2,Y2)
Я вижу 2 точки пересечения катетов
1-я (X1,Y2) 2-я (X2,Y1).
Назовите еще одну?
← →
oldman © (2008-08-08 10:27) [53]
> Я вижу 2 точки пересечения катетов
> 1-я (X1,Y2) 2-я (X2,Y1).
Нужны еще 2...
Координаты концов гипотенузы
← →
stas © (2008-08-08 10:31) [54]oldman © (08.08.08 10:27) [53]
> Нужны еще 2...
Заданы координаты (X1,Y1); (X2,Y2)
← →
@!!ex © (2008-08-08 10:32) [55]> [52] stas © (08.08.08 10:24)
Вы прикалываетесь или действительно не понимаете геометрии 8 класса?
← →
stas © (2008-08-08 10:33) [56]@!!ex © (08.08.08 10:32) [55]
Ну, назовите точку.
← →
@!!ex © (2008-08-08 10:42) [57]> [56] stas © (08.08.08 10:33)
Мне банально лень считать. Поэтому я продемонстрирую рисунком:
http://www.mediafire.com/imageview.php?quickkey=hzcggjnyute&thumb=5
Берем некую гипотенузу. и строим треугольник вашим методом. тоесть с катетами перпендикулярными осям координат.(состояние a)
Поворачиваем треугольник на некоторый угол.(Состояние b). Согласитесь, треугольник остался прямоугольным.
Однако мы можем построить к повернутой диагонали еще один треугольник вашим методом.(Состояние с).
Получаем ДВА прямоугольных треугольника для одной гипотенузы. Треугольник можно повернуть на бесконечное число углов, соответственно для одной гипотенуз ыомжно построить бсеокнечное количество прямоугольных тругольников.
P.S.
2004 в вашей почте - это год вашего поступления в первый класс? Если да, то не страшно, через пару лет вам все в школе объяснят. А вот если вы уже школу закончили... тогда вам ничего уже не поможет....
← →
oldman © (2008-08-08 10:47) [58]Из геометрии:
если А и В - точки "краев" диаметра окружности,
то для любой точки С, лежащей на окружности
треугольник АВС будет прямоугольным!!!
← →
Vlad Oshin © (2008-08-08 10:54) [59]
> если А и В - точки "краев" диаметра окружности,
> то для любой точки С, лежащей на окружности
> треугольник АВС будет прямоугольным!!!
это да
но тут машинная графика..
имеется ввиду, что стороны параллельны осям(сторонам монитора) при первоначальном задании координат.
← →
@!!ex © (2008-08-08 10:57) [60]> [56] stas © (08.08.08 10:33)
В принципе я могу и точку назвать.
Для этого надо через тиарему Пифагора вывести значение одного координат катета через координаты другого катета, и сместить координаты второго катета на некоторое значение, после чего посчитать координаты первого катета.
Но мне влос это делать просто так. Может заключим пари на что нибудь интересное? ТОгда без проблем "назову точку"
← →
@!!ex © (2008-08-08 10:57) [61]> [59] Vlad Oshin © (08.08.08 10:54)
Это уже давно обсудили. :))
← →
Юрий Зотов © (2008-08-08 11:01) [62]> @!!ex © (08.08.08 10:57) [61]
> Это уже давно обсудили. :))
Нет-нет, давайте продолжать! Ведь тема крайне сложна и интересна.
← →
stas © (2008-08-08 11:10) [63]@!!ex © , oldman ©
А черт возьми! вы правы!
Этот прямоугольник просто размеры менять будет.
@!!ex © (08.08.08 10:42) [57]
> P.S.
Давно закончил. просто моск в этом направлении отрафировался.
← →
@!!ex © (2008-08-08 11:13) [64]> [63] stas © (08.08.08 11:10)
Понятно... Бывает.
← →
oldman © (2008-08-08 11:33) [65]автору сабжа:
Зная координаты одной диагонали и то, что стороны прямоугольника параллельны осям, найди координаты другой диагонали и верти.
Предварительно совместив центр системы с центром прямоугольника.
Если стороны не параллельны осям, задача имеет бесконечное множество решений.
← →
DVM © (2008-08-08 11:48) [66]
> stas © (08.08.08 09:46) [43]
>
> oldman © (08.08.08 09:39) [42]
> между двумя сторонами всегда 90 градусов, это не параллепипед.
>
>
Мда. Параллелепипед это вообще объемное, трехмерное тело. Да и у него между всеми гранями смежными по 90 градусов.
> stas © (08.08.08 08:58) [37]
>
> Развели не понятно что.
> Если кому-то не понятен вопрос не вмешивайтесь.
Чья бы корова мычала, а чья бы молчала, геометр вы наш.
← →
stas © (2008-08-08 11:53) [67]DVM © (08.08.08 11:48) [66]
Ну, а что тяжело указать человеку на ошибку?
либо помочь?
Вместо бесполезных реплик.
← →
oldman © (2008-08-08 12:04) [68]
> DVM © (08.08.08 11:48) [66]
Я по запарке тоже иногда параллелограмм параллелепипедом называю, и что?
← →
DVM © (2008-08-08 12:12) [69]
> Я по запарке тоже иногда параллелограмм параллелепипедом
> называю, и что?
если бы дело было только в этом.
← →
stas © (2008-08-08 12:18) [70]DVM © (08.08.08 12:12) [69]
1. Дело в том что человеку надо было пояснить как нужно делать
2. [37] тебя как раз не касался.
← →
Palladin © (2008-08-08 13:43) [71]кто читал у Спольски про домик - поднимите руки :)
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];
Память: 0.65 MB
Время: 0.008 c