Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.16.254] |
|
Сообщ.
#1
,
|
|
|
Вообщем задача достаточно понятна. Имеются координаты 2х вершин равностороннего треугольника на плоскости, нужно найти третью (по сути может быть 2 варианта третьей).
Пытался сделать "в лоб" и вывести формулу, но чтото больно уж астрономическое получается. Думаю должно быть простое и рациональное решение |
Сообщ.
#2
,
|
|
|
Геометрически задачу можно решить по крайней мере двумя способами:
1. Проводим окружности с радиусом, равным данной стороне (обозначим его 'a') и ищем точки их пересечения. 2. Находим середину заданной стороны, проводим через нее срединный перпендикуляр и откладываем на нем в обе стороны отрезки длины a*cos(60°) = a*sqrt(3)/2 Оба способа должны дать одинаковые формулы, но второй проще, так как не нужно решать уравнения. Итак имеем cредняя точка - { (x1+x2)/2, (y1+y2)/2 ), перпендикуляр - { y1-y2, x2-x1 }, и искомые вершины { (x1 + x2 +- (y1 - y2)*sqrt(3))/2, (y1 + y2 +- (x2 - x1)*sqrt(3))/2 } |
Сообщ.
#3
,
|
|
|
Imho, более простой способ - переместить начало координат в одну из вершин, повернуть на 60 градусов и переместить назад. Тогда получится следующая формула:
x3=(x2-x1)*cos(60)-(y2-y1)*sin(60)+x1 y3=(x2-x1)*sin(60)+(y2-y1)*cos(60)+y1 |
Сообщ.
#4
,
|
|
|
спасибо, рябята. выручили!
|
Сообщ.
#5
,
|
|
|
OpenGL, можно и так, получается в точности та же самая формула.
|