【发布时间】:2021-03-10 06:50:30
【问题描述】:
我目前正在编写地图,并试图将街道段分成相等的部分。如果街道段是直的,只需将街道段的长度除以您想要的任何因素即可。然而,弯曲的街道更难分成相等的部分,因为它们由多个部分组成。我想要做的是找出一种方法将街道段分成相等的点,不管它有多弯曲,或者每段有多长。我尝试参数化曲线以使其工作,但它仍然不起作用。要了解我所说的参数化是什么意思,请查看this。
目前,这就是我目前正在实施的方式。
//street_seg_length is length of the ith street segment
for (double j = 0.0; j < street_seg_length[i]; j+=inc) {
double rem = j - int(j);
//A street segment can be split up into multiple curve points.
//The more curve points, the curvier a road is
LatLon from = curve_points_pos[i][int(j)];
LatLon to = curve_points_pos[i][int(j)+1];
//Returns cartesian coordinates from latitude and longitude of nth and n+1th curve point
double x1 = x_from_lon(from.longitude());
double y1 = y_from_lat(from.latitude());
double x2 = x_from_lon(to.longitude());
double y2 = y_from_lat(to.latitude());
//arrowX, arrowY are supposed to be the coordinates of a point between 2 curve points
double arrowX = (1 - rem)*x1 + rem*x2;
double arrowY = (1 - rem) * y1 + rem * y2;
}
}
rem 是上篇文章中讨论的余数,j 与上篇文章中的 t 值相同,p 是第 n 个点,q 是上篇文章中讨论的第 n+1 个点。
有人可以解释我可以做些什么来实现这一目标或我做错了什么吗?我想在街段上找到等距的点,不管它有多弯曲。我是否正确遵循链接帖子中的算法?我相信我是,但很明显算法是错误的,或者我没有正确实现它,后者更有可能。
【问题讨论】:
-
您有问题吗?
-
@MOehm 对不起,我猜有点含糊。我用我的问题更新了帖子的结尾。
-
double arrowX = (1 - rem)*x1 + rem*x2;在这里,您希望rem是介于0和1之间的数字,其中rem = 0表示arrowX = x1和rem = 1表示arrowX = x2。也许像rem = j / street_seg_length[i];这样的东西虽然没有足够的上下文可以确定,但几乎可以肯定不是rem = j - int(j);。 -
是的,不清楚
inc是什么。您的代码需要做两件事:找出当前“箭头”在哪个段中,然后找出箭头在该段中的哪个位置。看起来好像你在混淆j是什么,段索引或运行长度。您希望两者兼而有之,但这是不可能的。 -
@dxiv 感谢您的建议,但为什么不是 j - int(j)?如果 j 为 2.6,则 rem 将为 0.6,这就是我正在寻找的。另外,我怎样才能提供更多的上下文?