繁体   English   中英

强制贝塞尔循环在边界内说

[英]Force bezier loop to say inside boundary

我正在使用 GNU Octave 编写代码来模拟摩托车的单圈时间。 赛道由中线(作为 xy 点值)和宽度“B”表示。

赛道中线各点距离不等,例如直线段只有两个点,弯道可能有5-10个点。

赛车线是闭环立方贝塞尔曲线。

我想计算贝塞尔曲线与中线的距离,以检查车辆是否偏离道路(如果距离 > B/2 我偏离轨道)。 我对发生这种情况的地方不感兴趣,只有发生时才感兴趣。 现在检查代码是否有效,我通过计算赛车线的每个点到中线的距离作为三角形的高度,其中两个基本顶点是中线和顶部的两个点顶点是赛车线的点。 它有效,但我正在寻找另一种方法,因为这个方法非常慢。

作为替代方案,我尝试通过计算每个部分的角度来“拉直”中线,然后使用相同的“变换”拉直赛车线并检查最小和最大 Y 值,该值必须小于 B/2。 这种方法的问题是赛车线和中线的长度不一样,在赛道的某些部分赛车线可能更短,其他地方可能更长,因此转换将不是线性的。

另一种选择是将赛道转换为一个矩阵,其中赛道内填充“0”,赛道外填充“1”,并且赛车线将是一个具有相同 MxN 的矩阵,处处填充“0”,其他处填充“1”他赛车线。 通过对这两个矩阵求和,如果有一些“2”我就跑偏了。 现在我找不到制作这个的方法。

我找到了我的问题的答案,使用 function “inpolygon”。 因此,我将赛道的外边界设置为多边形,并将赛车线上的所有点设置为要检查的点。 function 告诉我某个点是否在多边形之外。 然后,我重复相同的操作,将内部边界设置为多边形。 现在所有赛车线点都必须在多边形之外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM