C 曲線上的點(二) 獲取距離最近的點

2022-02-13 06:43:47 字數 1169 閱讀 4239

如何在一條曲線上,獲取到距離指定點最近的點位置?

我們通過曲線上獲取的密集點,通過倆點之間連線,獲取連線上最近的點。我們能夠獲取到一系列最近的點集,最近只取距離最小的點即可。

我們這樣的演算法是否精確呢?不算太精確,但是對於獲取曲線上最近點,基本能滿足。

斜率變化不大的線段,點不密集;斜率變化較大的線段,點相當密集,所以由此點集得到的最近點,是相對準確的。

實現方案,以下**可以直接復用:

1

public

static

point getclosestpointonpath(point p, geometry geometry)29

10private

static tupledouble>getclosestpointonpathfigure(pathfigure figure, point p)

1123

else

if (line != null)24

;26}27

else

2831

foreach (point next in

points)

3238}39

return closepoints.orderby(t =>t.item2).first();

40 }

倆點之間的連線,如果當前點在此方向的投影為負或者大於當前長度,則取倆側的點:

1

private

static

point getclosestpointonline(point start, point end, point p)

28 vector v = end -start;

9double param = (p - start) * v /length;

10return (param < 0.0) ? start : (param > 1.0) ? end : (start + param *v);

11 }

效果圖:

獲取貝塞爾曲線上的100個點

include typedefstruct point2d void computebezier point2d cp,int numberofpoints,point2d curve int main int argc,const char argv int number 100 point2d ...

求直線上最近的二點 在公垂線上

直線是用乙個點和乙個方向向量 已單位化 構成 現在要求二條直線最近的點 即公垂線與兩直線的交點 class cray 射線類 如果二個直線平行,則兩條直線r1,r2的方向向量的內積必為1或 1,此時可計算s2在r1上的投影 點乘 在r1上計算投影點為sproject,則要求的兩點分別為sprojec...

判斷 點在曲線上 根據貝塞爾曲線上的點反算t值

專案中使用的是二次貝塞爾曲線,所以本文也主要以二次貝塞爾曲線為講解重點。要實現上述動畫,需要首先確定a點和b點在曲線上面的比例值ta和tb 最終的需求變成 根據貝塞爾曲線上的點反算t值 大概有以下幾種方法。現假設貝塞爾曲線上的點為點p 後續會用到該點 分片迭代是一種近似的方法。我們知道,二次貝塞爾曲...