Сначала я сделаю несколько определений.
let:
- p = вектор положения к концу линии
- v = вектор линии
- h = высота стрелки
- w = ширина стрелки
- L = вращение против часовой стрелки на 90 градусов
Тогда ваши три точки:
- p + (| v | / 2 - h / 2 + w / 2 L) v / | v |
- p + (| v | / 2 - h / 2- w / 2 L) v / | v |
- 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) };