algorithm - 给定共同的宽度和 3 个点,求 3 个矩形的长度,使它们共享一个角以形成一个三角形

标签 algorithm math geometry

您好,很抱歉这个标题令人困惑。

我正在尝试使用积分制作赛道。我想画 3 个矩形来组成我的道路。但是我不希望这些矩形重叠,我想在它们之间留出一个空白空间来放置我的角(三角形),这意味着它们只在一个点相交。由于道路的宽度相同,因此我知道矩形的宽度。

enter image description here

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

最佳答案

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

您应该做的是找到道路边缘的线,找出它们相交的位置,然后继续计算其他所有内容。

首先,给定 2 个点 PQ,我们可以将它们之间的连线以参数化形式记为 f(t) = P + t( Q-P)。请注意,Q - P = v 是表示直线方向的向量。

其次,给定一个向量 v = (x_v, y_v),向量 (y_v, -x_v) 与其成直角。除以它的长度 sqrt(x_v**2 + y_v**2) 得到一个与第一个成直角的单位向量。将 PQ 沿此矢量投影 d 距离,您在距离 d< 处的平行线上有 2 个点 来自您的原始行。

有两条这样的平行线。给定线上的一个点和线上的一个点,你的法线向量与这两条线之间的向量的点积的符号告诉你你是否找到了与另一条线在同一侧的平行线,或者在对面。

您只需要弄清楚它们相交的位置。但是要弄清楚 P1 + t*v1P2 + s*v2 线相交的位置,可以通过在 2 个变量中设置 2 个方程并求解来完成。您可以进行哪些计算。

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

关于algorithm - 给定共同的宽度和 3 个点,求 3 个矩形的长度,使它们共享一个角以形成一个三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42012486/

相关文章:

c# - 最长运行索引 C#

java - 查找实数数组每个元素频率的最快算法?

c - 为什么 fmax(a, b) 返回较小的(负)零以及如何干净地解决它?

javascript - 使用 JavaScript 防止标签重叠

math - 将球体映射到立方体

将图映射到另一个结构的算法

algorithm - 数字中每个数字的平方和

objective-c - iOS Sprite Kit 如何在横向方向上使弹丸指向目标?

algorithm - 找出液体到达第 n 个杯子所需的时间

algorithm - 极平面中的线段方向