Определить точки треугольника вокруг точки - PullRequest
0 голосов
/ 06 апреля 2011

Я разрабатываю в .NET приложение, которое рисует несколько линий. В середине линии мне нужно нарисовать массив направления линии.

Есть:
(xA, yA, xB, yB) или (pA, pB) - сегмент AB баллов
arrWidth, arrHeight - размеры стрелок;
> B - направление стрелки.

Потребность:
3 новые точки pArr1, pArr2, pArr3 - точки стрелки, которые должны находиться в середине сегмента AB.

enter image description here

1 Ответ

2 голосов
/ 06 апреля 2011

Сначала я сделаю несколько определений.

let:

  • p = вектор положения к концу линии
  • v = вектор линии
  • h = высота стрелки
  • w = ширина стрелки
  • L = вращение против часовой стрелки на 90 градусов

Тогда ваши три точки:

  1. p + (| v | / 2 - h / 2 + w / 2 L) v / | v |
  2. p + (| v | / 2 - h / 2- w / 2 L) v / | v |
  3. p + (| v | / 2 + h / 2) v / | v |

Где v / | v |- это единичный вектор вдоль вашей линии.

В двух измерениях L - это просто отображение (x, y) => (-y, x)

Чтобы быть более явным, используя переменные ввопрос, пункты выше могут быть записаны в C # как:

// assuming xA, yA, xB, yB, arrWidth, arrHeight are initialised
var xV = xB - xA;
var yV = yB - yA;
var v = Math.Sqrt(xV*xV + yV*yV);
var pArr1 = new[] {
    xA + xV / 2 - xV * arrHeight / (2 * v) - yV * arrWidth / (2 * v),
    yA + yV / 2 - yV * arrHeight / (2 * v) + xV * arrWidth / (2 * v) };
var pArr2 = new[] {
    xA + xV / 2 - xV * arrHeight / (2 * v) + yV * arrWidth / (2 * v),
    yA + yV / 2 - yV * arrHeight / (2 * v) - xV * arrWidth / (2 * v) };
var pArr3 = new[] {
    xA + xV / 2 + xV * arrHeight / (2 * v),
    yA + yV / 2 + yV * arrHeight / (2 * v) };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...