Algorithm 求3个矩形的长度,使它们共享一个角,形成一个三角形,给定一个公共宽度和3个点

Algorithm 求3个矩形的长度,使它们共享一个角,形成一个三角形,给定一个公共宽度和3个点,algorithm,math,geometry,Algorithm,Math,Geometry,嗨,很抱歉让人困惑的标题 我正试着用分数做一条赛道。我想画3个矩形,它们构成了我的道路。但是我不希望这些矩形重叠,我希望在它们之间留一个空白来放置我的角(三角形),这意味着它们只在一个点相交。因为道路有一个共同的宽度,我知道矩形的宽度 我知道点A、B和C的坐标,因此知道它们的长度和它们之间的角度。由此我想我可以说,黄色三角形的角度与外三角形的角度相同。从那里我可以算出蓝色三角形边的长度。然而,我不知道如何找到蓝色三角形点的坐标或黄色三角形边的长度,因此也不知道如何找到矩形。这是一个X-Y问题(

嗨,很抱歉让人困惑的标题

我正试着用分数做一条赛道。我想画3个矩形,它们构成了我的道路。但是我不希望这些矩形重叠,我希望在它们之间留一个空白来放置我的角(三角形),这意味着它们只在一个点相交。因为道路有一个共同的宽度,我知道矩形的宽度

我知道点A、B和C的坐标,因此知道它们的长度和它们之间的角度。由此我想我可以说,黄色三角形的角度与外三角形的角度相同。从那里我可以算出蓝色三角形边的长度。然而,我不知道如何找到蓝色三角形点的坐标或黄色三角形边的长度,因此也不知道如何找到矩形。

这是一个X-Y问题(问我们如何完成X,因为你认为它可以帮助你解决问题Y更好地解决另一种方法),但幸运的是你给了我们Y,所以我可以回答这个问题

你应该做的是找到道路边缘的线,找出它们相交的地方,然后继续计算其他所有的东西

首先,给定两个点
p
Q
,我们可以将它们之间的线以参数化形式写下来,即
f(t)=p+t(Q-p)
。请注意,
Q-P=v
是表示直线方向的向量

其次,给定一个向量
v=(x\u v,y\u v)
,向量
(y\u v,-x\u v)
与之成直角。除以它的长度
sqrt(x_v**2+y_v**2)
得到一个与第一个垂直的单位向量。沿着这个向量投影
P
Q
一个距离
d
,你在平行线上有两个点,距离原始直线
d

有两条这样的平行线。给定直线上的一个点和直线外的一个点,法向量与这两条直线之间的向量的点积的符号告诉你,平行线是在同一侧还是在另一侧

你只需要找出它们的交叉点。但是,通过在两个变量中建立两个方程并求解,可以计算出线
P1+t*v1
P2+s*v2
相交的位置。您可以进行哪些计算


现在,您有足够的信息来计算道路的边缘,哪些边缘在内部,以及图表中的每个交叉点。这可以让你找出你需要的任何东西。

稍微不同的方法,有点三角学:

定义向量

 b = B - A
 c =  C - A
 uB = Normalized(b)
 uC = Normalized(c)
 angle 
 Alpha = atan2(CrossProduct(b, c), DotProduct(b,c))
 HalfA  = Alpha / 2 
 HalfW = Width / 2
 uB_Perp = (-uB.Y, ub.X)  //unit vector, perpendicular to b

 //now calculate points:
 P1 = A + HalfW * (uB * ctg(HalfA) + uB_Perp)  //outer blue triangle vertice
 P2 = A + HalfW * (uB * ctg(HalfA) - uB_Perp)  //inner blue triangle vertice, lies on bisector

(我没有考虑过大宽度的情况)

谢谢你的反馈。我对我的答案进行了编辑,使之更清楚。