Algorithm 求3个矩形的长度,使它们共享一个角,形成一个三角形,给定一个公共宽度和3个点
嗨,很抱歉让人困惑的标题 我正试着用分数做一条赛道。我想画3个矩形,它们构成了我的道路。但是我不希望这些矩形重叠,我希望在它们之间留一个空白来放置我的角(三角形),这意味着它们只在一个点相交。因为道路有一个共同的宽度,我知道矩形的宽度 我知道点A、B和C的坐标,因此知道它们的长度和它们之间的角度。由此我想我可以说,黄色三角形的角度与外三角形的角度相同。从那里我可以算出蓝色三角形边的长度。然而,我不知道如何找到蓝色三角形点的坐标或黄色三角形边的长度,因此也不知道如何找到矩形。这是一个X-Y问题(问我们如何完成X,因为你认为它可以帮助你解决问题Y更好地解决另一种方法),但幸运的是你给了我们Y,所以我可以回答这个问题 你应该做的是找到道路边缘的线,找出它们相交的地方,然后继续计算其他所有的东西 首先,给定两个点Algorithm 求3个矩形的长度,使它们共享一个角,形成一个三角形,给定一个公共宽度和3个点,algorithm,math,geometry,Algorithm,Math,Geometry,嗨,很抱歉让人困惑的标题 我正试着用分数做一条赛道。我想画3个矩形,它们构成了我的道路。但是我不希望这些矩形重叠,我希望在它们之间留一个空白来放置我的角(三角形),这意味着它们只在一个点相交。因为道路有一个共同的宽度,我知道矩形的宽度 我知道点A、B和C的坐标,因此知道它们的长度和它们之间的角度。由此我想我可以说,黄色三角形的角度与外三角形的角度相同。从那里我可以算出蓝色三角形边的长度。然而,我不知道如何找到蓝色三角形点的坐标或黄色三角形边的长度,因此也不知道如何找到矩形。这是一个X-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
(我没有考虑过大宽度的情况)
谢谢你的反馈。我对我的答案进行了编辑,使之更清楚。