我用一系列的点的数组创建了一个ICurvePrimitivePtr
bvector<DPoint3d> pts;
.....
auto prim = ICurvePrimitive::CreateLineString(pts);
然后用一段取出fraction:
double fraction = length / totalLength;
prim->FractionToPoint(fraction, point);
我发现ICurvePrimitive要是一条直线的话,取出的点没问题,如果是折线的话,取出的点并不是我在线上设的点。
FractionToPoint的取点机制是什么呢?
我分不同情况测试了一下,对于lineString的话应该是先每一段分开,然后再到每一段里边去找对应的点,例如,如果linestring有三段的话,那么第一段的终点就是0.33333...,第二段终点就是0.666666....,如果是函数传递0.75的话,因为0.75大于0.6666...且小于1,所以0.75落在了第三段,具体是第三段的哪一个点是这样算的,第三段总共是0.333333....,所以是(0.75-0.66666...)/0.3333....,大概就是这么算的,您可以验证一下。
Answer Verified By: Zhang Duo
原来是这样,明白了,谢谢