如何画2个点和斜率的平行四边形

发布于 2024-10-13 16:10:35 字数 293 浏览 3 评论 0原文

我有一个起点(x0,y0),一个终点(x2,y2)和一个斜率((x0,y0)和(x3,y3)之间的线),我想画一个平行四边形。

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

有人可以告诉我该怎么做吗?或者建议一些算法什么的。

编辑:这里 y0 = y1 和 y2 = y3

问候

I have a start point(x0,y0), a end point(x2,y2) and a slope (of line between (x0,y0) and (x3,y3)) and i want to draw a parallelogram.

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

Can somebody tell me how to do this? or suggest some algorithm or something.

Edit: Here y0 = y1 and y2 = y3

Regards

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

抚笙 2024-10-20 16:10:35

如果我们将斜率表示为 m 并假设 y0=y1y3=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

If we denote the slope as m and suppose that y0=y1 and y3=y2, then we can compute x3 like so:

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

And similarly:

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
刘备忘录 2024-10-20 16:10:35

一般来说,如果平行四边形的边不平行于轴:

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
     }

In general, if the sides of the parallelogram are not parallel to the axes:

alt text

The formulas for z0 and z1 are:

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
     }
痴骨ら 2024-10-20 16:10:35

您没有足够的数据。只需两个点和一个斜率,您就有无限可能的平行四边形(两个点和一个斜率仅定义两条平行线,而不是平行四边形)。

从你的绘图中,你似乎正在寻找具有水平边框的平行四边形,如果是这样,它会给你第二个斜率,并且你有 y0 = y1 和 y2 = y3。

使用 slop 可以得到 x3:

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

只有 x1 仍然未知:

x1 = x0 + (x2-x3)

显然,当您没有解决方案或无限解决方案时,我没有检查所有退化情况。我把它留给别人。

You do not have enough data. With just two points and a slope you have an infinity of possible parallelograms (two points and a slope defines just two parallels, not a parallelogram).

From your drawing you seem to be looking for the parallelogram with horizontal borders, if so it gives you a second slope and you have y0 = y1 and y2 = y3.

You get x3 using the slop with:

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

There is only x1 still unknown:

x1 = x0 + (x2-x3)

Obviously I did not checked for all degenerating cases when you have no solution or infinite solutions. I leave that to someone else.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文