Как нарисовать параллелограмм с 2 точками и уклоном - PullRequest
0 голосов
/ 20 января 2011

У меня есть начальная точка (x0, y0), конечная точка (x2, y2) и наклон (линии между (x0, y0) и (x3, y3)), и я хочу нарисовать параллелограмм.

(x0,y0)       (x1,y1)
     __________
     \         \  
      \         \
       \_________\ 
    (x3,y3)      (x2,y2)

Может кто-нибудь сказать мне, как это сделать? или предложите какой-нибудь алгоритм или что-то в этом роде.

Редактировать: Здесь y0 = y1 и y2 = y3

Привет

Ответы [ 3 ]

3 голосов
/ 20 января 2011

Если мы обозначим наклон как m и предположим, что y0=y1 и y3=y2, то мы можем вычислить x3 примерно так:

m = (y3 - y0) / (x3 - x0)
y3 = y2
m = (y2 - y0) / (x3 - x0)
m*x3 - m*x0 = y2 - y0
m*x3 = y2 - y0 + m*x0
x3 = (y2 - y0 + m*x0) / m

И аналогично:

m = (y2 - y1) / (x2 - x1)
y1 = y0
m = (y2 - y0) / (x2 - x1)
m*x2 - m*x1 = y2 - y0
-m*x1 = y2 - y0 - m*x2
x1 = -(y2 - y0 - m*x2) / m
2 голосов
/ 20 января 2011

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

Из вашего чертежа вы, похоже, ищете параллелограмм с горизонтальными границами, если это так, это дает вам второй уклон, и у вас есть y0 = y1 и y2 = y3.

Вы получаете x3, используя наклон с:

x3 = ((y3-y0)/slope) + x0

Существует только x1, пока неизвестно:

x1 = x0 + (x2-x3)

Очевидно, я не проверял все вырождающиеся случаи, когда у вас нет решения или бесконечного решения.Я оставляю это кому-то еще.

1 голос
/ 20 января 2011

В общем, если стороны параллелограмма не параллельны осям:

alt text

Формулы для z0 и z1:

z0 = {  Cos[phi]^2 (X2 + (Y0 - Y2) Cot[theta]) + 
        Cos[phi] (Y0 - Y2 + (X0 - X2) Cot[theta]) Sin[phi] + X0 Sin[phi]^2, 

        Y0 Cos[phi]^2 + 
        Cos[phi] (X0 - X2 + (-Y0 + Y2) Cot[theta]) Sin[phi] + 
        (Y2 + (-X0 + X2) Cot[theta]) Sin[phi]^2
     }

z1 = {  Csc[theta] (Cos[phi - theta] ((-Y0 + Y2) Cos[phi] + X2 Sin[phi]) - 
        X0 Cos[phi] Sin[phi - theta]), 

        Y2 Cos[phi]^2 + 
        Cos[phi] (-X0 + X2 + (Y0 - Y2) Cot[theta]) Sin[phi] + 
        (Y0 + (X0 - X2) Cot[theta]) Sin[phi]^2
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...