我试图设计一个数据结构,在欧几里得平面上保存/表示一个分段的圆形轨迹。该轨迹受约束为连续的,且具有有限的曲率,因此圆弧与切向相交。
存储所有圆中心、半径和接触点将允许检查O(1)中任何地方的几何,但由于数据冗余,需要明确执行连续性和曲率约束。在我看来,这会使代码变得混乱。
只将圆接触点(沿曲线上的路径点)与曲线的初始方向一起存储,原则上就足够了,避免了数据冗余,但需要进行O( n )计算来检查弧n的几何形状,因为该弧线取决于轨迹中的所有弧。
我想避免数据冗余,但我也不想使几何检查的成本令人望而却步。
有没有人有什么高层次的想法/建议可供分享?
发布于 2018-09-13 07:24:44
如果我是对的,你需要
所以对于给定的s,你找到了弧度的指数,然后是方位和点的坐标。(对于一个点的序列,或者用二分法对一个点进行递增。)每个弧需要5个参数。
只有累积脓肿是全球性的,但你不能没有它们的单点访问。你可以降低半径和开始角,并从曲线脓肿和极限角的差异中检索它们。这将减少到三个参数。
另一方面,只知道中心的坐标以及起点和终点的坐标就足以恢复整个几何,这就需要每个弧的两个参数。
两条弧线的交汇点在中心线上,如果你知道一个半径,另一个半径如下。极限角是由直线的方向决定的。因此,对于增量遍历,这种非冗余的描述可以做到。

为了便于计算,了解s和弧指数,考虑从中心到相邻弧中心的向量。旋转它们,使第一个变成水平。另一种的成分会给出振幅角。振幅的分数(s - Si-1) / (Si - Si-1)给出了点的方位角,对其施加反旋转。

发布于 2018-09-11 17:47:04
我会用获取该元素的任何点的信息所需的数据来存储项目。例如,弧需要x、y、初始方向、半径、长度(或端点、角度差或任何您认为最简单的)。
因为你需要两个端点之间的连续性(相同的x,y,相同的方位,也许是相同的曲率),所以需要一个具有这种性质的node。请注意,这些属性是常见的弧和直道(一个特殊的弧线识别为半径= 0)。所以你可以把node和item一样对待。
轨道应该在任何请求之前计算出来。所以你有所有的项目-数据提前。
容器取决于您请求信息的方式。
如果轨迹可以用网格表示,那么最好使用四叉树。
我想您必须从x,y或accumulated length输入中找到该项目。您必须遍历容器才能找到最接近输入数据的元素。排序后的数据可能会有所帮助。
我选择的是一个包含连续元素的简单向量,它恰好是根据累积轨迹长度排序的。
x,y在x排序容器(或树)上的查找并不是那么简单,因为某些x,y可能与几个项目垂直,无论是连续的还是不连续的,是否接近,您需要选择最近的一个。
https://stackoverflow.com/questions/52280239
复制相似问题