Подтвердить что ты не робот

Центр поиска 2D-треугольника

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

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

edit: Да, то, что я ищу, - это центр тяжести.

4b9b3361

Ответ 1

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

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). Выполните свое вращение. Теперь отмените перевод, который вы выполнили ранее.

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

#include<iostream>  // Desouky
#include <cmath>
#include<utility>       // for pair
 using namespace std;


 void printAngle(pair<int, int> a, pair<int, int> b,
pair<int, int> c)
 {
float X = (a.first + b.first + c.first) / 3;
float Y = (a.second + b.second + c.second) / 3;
cout.precision(6);
cout << fixed << X << " " << Y;
}
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
pair<int, int> A;
pair<int, int> B;
pair<int, int> C;


cin >> A.first >> A.second;
cin >> B.first >> B.second;
cin >> C.first >> C.second;

 printAngle(A, B, C);

 }