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

Вниз

Возникла проблема. Поворот треугольника   Найти похожие ветки 

 
ProgRAMmer Dimonych ©   (2006-11-06 22:35) [0]

Треугольник задан координатами своих вершин (a1;a2), (b1;b2), (c1;c2). Выполнить поворот треугольника на 90 градусов относительно вершины (a1;a2). Нарисовать исходный и новый треугольники.

В методическом пособии дана формула.

b=arctg((y2-y1)/(x2-x1)) - это угол между отрезком и прямой параллельной OX

L=sqrt(sqr(x2-x1)+sqr(y2-y1)) - длина отрезка

x3=x1+L*cos(a+b)
y3=y1+L*sin(a+b)

где a - угол, на который поворачивается отрезок вокруг точки (x1;y1), в данном случае - 90 градусов.

Вроде написал прогу с анимацией процесса поворота, всё хорошо. Потом даю тест:

A(50;50), B(0;0), C(50;-50).

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

Есть подозрение, что причина в формуле: если угол b=-135 градусов, то arctg(tg(b))=45, что отличается на 180 градусов, но в методичке по этому поводу нет никаких пояснений.

Кто-нибудь решал подобную задачу? В чём тут прикол?

Если надо, кину сюда текст программы.


 
ferr ©   (2006-11-06 22:36) [1]

> b=arctg((y2-y1)/(x2-x1)) - это угол между отрезком и прямой
> параллельной OX

плохая методичка))


 
ProgRAMmer Dimonych ©   (2006-11-06 22:37) [2]

> ferr ©   (06.11.06 22:36) [1]

А что здесь должно быть на самом деле?


 
ferr ©   (2006-11-06 22:38) [3]

> А что здесь должно быть на самом деле?

ничего


 
ProgRAMmer Dimonych ©   (2006-11-06 22:39) [4]

Нет, а серьёзно.


 
ferr ©   (2006-11-06 22:39) [5]

ну это грабли потенциальные.. так не делается.. ещё?


 
ProgRAMmer Dimonych ©   (2006-11-06 22:41) [6]

Чё-то не улавливаю мысли, что здесь должно быть, чтобы не возникало проблем с треугольниками типа [0].


 
ferr ©   (2006-11-06 22:42) [7]

я бы построил 2 вектора, повернул их на 90 гравдусов (2 строчки, линейное отображение), и пошёл чай пить..


 
guav ©   (2006-11-06 22:44) [8]

arctan2


 
ProgRAMmer Dimonych ©   (2006-11-06 22:46) [9]

> guav ©   (06.11.06 22:44) [8]
Квадрат или что?


 
ferr ©   (2006-11-06 22:46) [10]

> [8] guav ©   (06.11.06 22:44)
> arctan2

ага, тоже выход))


 
ferr ©   (2006-11-06 22:47) [11]

Только я вот думаю зачем нужны atanы, если без них можно))


 
guav ©   (2006-11-06 22:48) [12]

а вообще, поворот на 90 делается без тригонометрических функций такой матрицей:
 0  1
-1  0

Т.е. что-то вроде (X - x1) := (Y - y1); (Y - y1) := -(X - x1);


 
guav ©   (2006-11-06 22:48) [13]

> [9] ProgRAMmer Dimonych ©   (06.11.06 22:46)

Нет. Функция.


 
ProgRAMmer Dimonych ©   (2006-11-06 22:50) [14]

> guav ©   (06.11.06 22:48) [13]
Проблема в том, что у меня трубопаскакаль.


 
ferr ©   (2006-11-06 22:53) [15]

> Проблема в том, что у меня трубопаскакаль.

[7] [12]


 
Горгер ©   (2006-11-07 03:03) [16]

Читай материал по аффинным преобразованиям.



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

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

Наверх




Память: 0.5 MB
Время: 0.034 c
1-1160722650
CaptainX
2006-10-13 10:57
2006.11.26
Перенести текст или файл на иконку в трее (Drag and Drop)


15-1162667740
Raea
2006-11-04 22:15
2006.11.26
Аналоги функций char и ord в C++!


2-1162821990
daser
2006-11-06 17:06
2006.11.26
Как проверить такое, если форма свернута (на панель задач), то


2-1163155374
Григорий
2006-11-10 13:42
2006.11.26
Шрифты


1-1161023961
Incognito
2006-10-16 22:39
2006.11.26
Добавление значения в TeeChart