Нахождение центра 2D треугольника? - PullRequest
19 голосов
/ 08 февраля 2009

Мне дали структуру для 2D-треугольника с координатами x и y, переменной вращения и так далее. Из точки, созданной этими координатами x и y, я должен нарисовать треугольник вокруг точки и повернуть его соответствующим образом с помощью переменной вращения.

Я знаком с рисованием треугольников в OpenGl с помощью GL_TRIANGLES. Моя проблема заключается в том, чтобы как-то извлечь середину треугольника и нарисовать вокруг него вершины.

edit: Да, я ищу центроид.

Ответы [ 4 ]

36 голосов
/ 08 февраля 2009

Существуют разные «типы» центров треугольника. Подробности на: Центры треугольника . Быстрый способ найти центр треугольника - это усреднить все координаты вашей точки. Например:

GLfloat centerX = (tri[0].x + tri[1].x + tri[2].x) / 3;
GLfloat centerY = (tri[0].y + tri[1].y + tri[2].y) / 3;

Когда вы найдете центр, вам нужно будет повернуть свой треугольник вокруг центра. Для этого переведите так, чтобы центр находился теперь в (0, 0). Выполните свое вращение. Теперь отмените перевод, который вы выполнили ранее.

6 голосов
/ 08 февраля 2009

Полагаю, вы имеете в виду центроид треугольника!?
Это может быть легко вычислено как 1/3 (A + B + C), где A, B и C - соответствующие точки треугольника. Если у вас есть свои очки, вы можете просто умножить их на свою матрицу вращения, как обычно. Надеюсь, я тебя понял.

2 голосов
/ 08 февраля 2009

В треугольнике есть несколько точек, которые можно считать его центром (ортоцентр, центроид и т. Д.). Этот раздел статьи Википедии о треугольниках содержит больше информации. Просто посмотрите на картинки, чтобы получить краткий обзор.

0 голосов
/ 08 февраля 2009

Под "серединой" вы подразумеваете "центроид", т.е. центр тяжести, если бы это был трехмерный объект постоянной толщины и плотности?

Если это так, то выберите две точки и найдите среднюю точку между ними. Затем возьмите эту среднюю точку и третью точку и найдите точку 1/3 пути между ними (ближе к средней точке). Это твой центроид. Я не делаю математику для тебя.

...