2012-01-01 10 views
0

私のプロジェクトの他の機能をC#で追加したいのですが、私のプログラムでは既に線を描くことができますが、線の交点を検出して交点を表示します。出来ますか?行がC#で交差するかどうかを検出する方法は?

public static Double PerpendicularDistance(Point Point1, Point Point2, Point Point) 
    { 
     Double area = Math.Abs(.5 * (Point1.X * Point2.Y + Point2.X * Point.Y + Point.X * Point1.Y - Point2.X * Point1.Y - Point.X * Point2.Y - Point1.X * Point.Y)); 
     Double bottom = Math.Sqrt(Math.Pow(Point1.X - Point2.X, 2) + Math.Pow(Point1.Y - Point2.Y, 2)); 
     Double height = area/bottom * 2; 

     return height; 
    } 
} 

ここでのポイントは、私のXとY座標のためのクラスです:

私のプログラムはまた、ここではサンプルコードがあり、垂直距離のためのコンピューティングを含み、ありがとうございました。

+1

[関連する質問](http://stackoverflow.com/questions/385305/efficient-maths-algorithm-to-calculate-intersections)を参照してください。 –

+0

あなたの質問への簡単な答えは 'それは可能ですか?'です:はい;-)長い方:あなたの問題は何ですか?問題を調査しましたか?より具体的に、人々があなたを助けることができるようになります。 – Andre

+0

私の問題は、C#で1行の図面の交差をどのように取得し、メッセージボックスを使用して表示するかを知りたいということです。ありがとうございました – mica

答えて

0

2行の交差点を見つけようとしている場合、その解決法はかなり簡単です。

2行は= Cすることで、フォーム斧+である場合は、次のことが一つだけ描かれた線があると言うの上

float delta = a1*b2 - a2*b1; 
if(delta == 0) 
    throw new ArgumentException("Lines are parallel"); 

float x = (b2*c1 - b1*c2)/delta; 
float y = (a1*c2 - a2*c1)/delta; 

私の懸念はコメントです。私はあなたが何を意味するか分からない。それは、アプリケーションが1つのラインを提供し、ユーザがもう1つを提供していることを意味しますか、またはラインが交差する曲線で扱っていますか?

+0

実際には2番目の「曲線が交差する曲線」.. – mica

+0

非常に興味深い問題!!!これは私がこれを行うために考えることができる唯一の方法ですが、コード効率が非常に高いとは思いません。明らかに交差していない線を試す必要がなくなるような最適化がいくつかあります。 曲線は、いくつかの線分に分割することで近似できます。次に、線分のいずれかが交差しているかどうかを調べるために、プログラムを繰り返します。 –

+0

さらなる解明....カーブを10の線分に分割すると、s1-s2、s1-s3、s1と他のセグメント、s2と他のすべてのセグメントなどを使用します。残念ながら、これはおおよそn * n時間で実行されるため、パフォーマンスはそれほど高くありません。 –

関連する問題