円筒オブジェクトのサーフェス測定の数に基づいてサークルの中心を見つける必要があります。サーフェスポイントのセグメントからサークル中心を見つける
私は現在、(How to determine the radius and center of a circle when only three noncollinear points are known?から採取された)中心を見つけるために3つの点に基づいて(C#で書かれた)簡略化されたアルゴリズムを使用する:
private Point CircleCenter(List<Point> points, double p1Skip, double p2Skip, double p3Skip)
{
var p1 = points.Skip((int)(points.Count * p1Skip)).First();
var p2 = points.Skip((int)(points.Count * p2Skip)).First();
var p3 = points.Skip((int)(points.Count * p3Skip)).First();
double mr = (p2.Y - p1.Y)/(p2.X - p1.X);
double mt = (p3.Y - p2.Y)/(p3.X - p2.X);
double centerX = (mr * mt * (p3.Y - p1.Y) + mr * (p2.X + p3.X) - mt * (p1.X + p2.X))/(2 * (mr - mt));
double centerY = (-1/mr) * (centerX - ((p1.X + p2.X)/2)) + ((p1.Y + p2.Y)/2);
return new Point(centerX, centerY, p1.Z);
}
問題は、この方法はノイズに非常に敏感であることです。いずれかのポイントがオフの場合、もちろん、それは中心ポイントに影響します。 私は、各断面積に対して利用可能な640の表面点を有しており、3点以上を使用することができるはずであることを示す。
私は、既存のアルゴリズムがより多くの点で拡張することが可能であると推測していますが、どのように把握できません。
興味深い問題を数学的にありますあなたがそのサークル上にあるより多くのポイントを知っていても、あなたは多くを行うことができません。私は方向がどのようにノイズを減らすか、またはより良い近似円(円の中心)を形成するために640点のうち3点を賢明に選択する方法でなければならないと思う... – shole
1つの考え方は、異なる点を使用して、それらの点の平均値または中央値を計算する。私は現時点でそれを調べています – FishySwede
はい...同様の考え方(コンセプトのみ、実装方法はまったく分かりません)、私はそれがより少ないポイントに640ポイントを「契約」するのがより現実的だと思います。 3つの点が残っていて、その3つの点を使って円を形成するまで、各繰り返しを洗練します。 – shole