Графика в Delphi, Поворот на 90 градусов |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Графика в Delphi, Поворот на 90 градусов |
Екатерина |
15.03.2012 11:20
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Женский Реальное имя: Екатерина Репутация: 0 |
Здравствуйте! Мы начали изучать новую дисциплину «Компьютерная графика». У меня есть задание по лабе на тему "Поворот фигуры на определенное количество градусов". Задание хотелось бы выполнить самостоятельно, но тема оказалась тяжела для понимания.
Подскажите, как реализовать поворот точки на осях координат вокруг их центра на 90 градусов. Если я это пойму, тогда возможно и свою фигуру смогу повернуть самостоятельно. Оси вроде бы правильно составлены. Вот они: implementation Сообщение отредактировано: Екатерина - 15.03.2012 11:21 |
TarasBer |
15.03.2012 15:14
Сообщение
#2
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Ну смотри, есть точка
(x,y) Чтобы найти её положение относительно центра (xc,yc), надо взять (x1 = x-xc, y1=y-yc) Потом эту точку поворачиваем на 90 градусов стандартным способом: (x2=-y1, y2=x1) Потом из положения относительно центра переводим в положение относительно экрана. (xn=x2+xc; yn=y2+xc). -------------------- |
Гость |
15.03.2012 21:07
Сообщение
#3
|
Гость |
Если не трудно, можно кусочек кода привести в качестве примера?
|
мисс_граффити |
15.03.2012 22:41
Сообщение
#4
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
с чего я бы посоветовала начать - сделать функции перевода "экранных" координат в математические и обратно, чтобы каждый раз в них не путаться.
теперь, собственно, про поворот точки вокруг начала координат (в математических координатах). x_new:=x*cos(fi)-y*sin(fi); y_new:=x*sin(fi)+y*cos(fi); fi - угол в радианах, х и y - начальные координаты. если фигура простенькая, то можно так каждую точку повернуть. если сложная - умножать матрицы... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Екатерина |
15.03.2012 23:27
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Женский Реальное имя: Екатерина Репутация: 0 |
Цитата сделать функции перевода "экранных" координат в математические и обратно - если не секрет, подскажите как это сделать. |
TarasBer |
16.03.2012 11:18
Сообщение
#6
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Если не трудно, можно кусочек кода привести в качестве примера?
-------------------- |
Екатерина |
23.03.2012 14:06
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Женский Реальное имя: Екатерина Репутация: 0 |
Здравствуйте! Нужна ваша подсказка.
Будьте добры, посмотрите пожалуйста программу. 1)Правильно ли я написала процедуру масштабирования моей фигуры для соответствующей кнопки? (Т.е. не совсем по дилетантски?) 2)Никак не получается написать код для кнопки « Перенос». Подскажите, если не сложно 3)Возможно ли сделать так, чтобы значение угла вращения (Label1) менялось не от 0 до 10, а от 0 до 360 градусов? unit Unit1; Сообщение отредактировано: Екатерина - 23.03.2012 14:07 Прикрепленные файлы ________________.rar ( 236.93 килобайт ) Кол-во скачиваний: 277 |
TarasBer |
23.03.2012 14:43
Сообщение
#8
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
>
RectCooOrg[0].X := 50 * (StrToInt(edit1.text)); RectCooOrg[0].Y := 70 * (StrToInt(edit1.text)); RectCooOrg[1].X := 120 * (StrToInt(edit1.text)); RectCooOrg[1].Y := 70 * (StrToInt(edit1.text)); RectCooOrg[2].X := 130 * (StrToInt(edit1.text)); RectCooOrg[2].Y := 30 * (StrToInt(edit1.text)); RectCooOrg[3].X := 60 * (StrToInt(edit1.text)); RectCooOrg[3].Y := 30 * (StrToInt(edit1.text)); RectCooOrg[4].X := 50 * (StrToInt(edit1.text)); RectCooOrg[4].Y := 70 * (StrToInt(edit1.text)); Что это за числа? Я про 50,70,120... Они же у тебя встречаются в procedure TForm1.FormCreate(Sender: TObject); Их лучше сделать константами. А ещё лучше вычислять по формулам по размерам формы. Дальше, зачем StrToInt считать столько раз? Лучше сохранить во временную переменную dScale, заодно понятнее будет, что там такое. Что такое Button1, Edit1? В инспекторе объектов задай компонентам нормальные названия (поле Name). > 3)Возможно ли сделать так, чтобы значение угла вращения (Label1) менялось не от 0 до 10, а от 0 до 360 градусов? Поменять 10 на 360 в procedure TForm1.TrackBar1Change(Sender: TObject);? > 2)Никак не получается написать код для кнопки « Перенос». Подскажите, если не сложно Меняешь x0,y0 видимо -------------------- |
Екатерина |
23.03.2012 20:53
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Женский Реальное имя: Екатерина Репутация: 0 |
Спасибо!
|
Текстовая версия | 20.09.2024 5:00 |