Как найти координаты 2-го равностороннего треугольника в C?

У меня есть координаты (x, y) 2 точек. Я хочу создать третью точку так, чтобы эти 3 точки сделали равносторонний треугольник.

Как я могу вычислить третью точку?

Спасибо

6
задан user1118321 5 March 2015 в 01:49
поделиться

4 ответа

Прочитав сообщения (особенно vkit), я создал этот простой фрагмент кода, который будет работать в одном направлении (помните, что есть два момента). Модификация для другого случая должна быть тривиальной.

#include<stdio.h>
#include<math.h>

typedef struct{
  double x;
  double y;
} Point;

Point vertex(Point p1, Point p2){
  double s60 = sin(60 * M_PI / 180.0);    
  double c60 = cos(60 * M_PI / 180.0);

  Point v = {
    c60 * (p1.x - p2.x) - s60 * (p1.y - p2.y) + p2.x,
    s60 * (p1.x - p2.x) + c60 * (p1.y - p2.y) + p2.y
  };

  return v;
}
9
ответ дан 8 December 2019 в 04:28
поделиться

Назовем ваши две точки A и B. Разделите пополам AB, назовите эту точку C. Найдите наклон AB (Y A -Y B ] / X A -X B ), назовите это m. Найдите перпендикуляр к нему (-1 / m) и назовите его m 2 . Затем вычислите отрезок CD, длина которого равна sin (60) * длина (AB), с наклоном m 2 (таких точек будет две, по одной с каждой стороны от AB). ABD - тогда ваш равносторонний треугольник.

Это, очевидно, «конструктивный» метод. Вы также должны уметь это делать, решая набор линейных уравнений. Я не пытался найти правильную систему уравнений для этого случая, но этот подход имеет тенденцию быть несколько более стабильным в численном отношении и имеет меньше особых случаев (например, в конструктивной версии необходимо учитывать наклон 0. специально).

4
ответ дан 8 December 2019 в 04:28
поделиться

Для задания BlueRaja перейдите в конец сообщения:


Ответ с использованием перевода и поворота:

Говорит, что точки - это P (x1, y1) и Q (x2, y2).

Поскольку это графика, вы можете использовать трансформации, чтобы понять суть.

Сначала переместите оси так, чтобы P было началом координат. Затем поверните Q вокруг P на 60 градусов (или -60, чтобы получить другую возможную точку).

Это дает вам координаты третьей точки, скажем R, когда P - начало координат.

Переведите обратно, и готово.

Вы можете использовать стандартный графический API, который позаботится о точности и т. Д. За вас. Никаких головных болей.

Конечно, вы можете посчитать и на самом деле придумать формулу и использовать ее, и это может быть быстрее, но тогда вопрос может быть закрыт как не по теме; -)


Чтобы принять вызов BlueRaja: Вот это метод, в котором не используется тригонометрия.

Даны точки P (x1, y1) и Q (x2, y2) Скажем, точка, которую нам нужно найти (R), это (x3, y3).

Пусть T - середина PQ.

Нам известна площадь треугольника PQR (поскольку он равносторонний и нам известна сторона)

, и нам известна площадь треугольника PRT (1/2 предыдущей площади).

Теперь площадь треугольника может быть записана как определитель, имеющий координаты как записи:

2*Area = |D|

where

     | 1 x1 y1|
D =  | 1 x2 y2|
     | 1 x3 y3|

У нас есть два таких уравнения (которые являются линейными), решите относительно x3 и y3.

4
ответ дан 8 December 2019 в 04:28
поделиться

Можно повернуть вторую точку на 60° вокруг первой, чтобы найти местоположение третьей точки.

Что-то вроде этого:

//find offset from point 1 to 2
dX = x2 - x1;
dY = y2 - y1;
//rotate and add to point 1 to find point 3
x3 = (cos(60°) * dX - sin(60°) * dY) + x1;
y3 = (sin(60°) * dX + cos(60°) * dY) + y1;
8
ответ дан 8 December 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: