2012-01-01 5 views
0

Я хочу добавить дополнительную функцию моего проекта в C#, я уже могу нарисовать линии в своей программе, но я хочу обнаружить INTERSECTING LINES одной линии, нарисованной и отобразить точку, в которой они пересекаются. Является ли это возможным? СпасибоКак определить, пересекает ли линия в 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

Моя проблема заключается в том, что я хочу знать, как получить пересечение чертежа ONE LINE на C# и отобразить его с помощью окна сообщений. Спасибо – mica

ответ

0

Если вы пытаетесь найти пересечение двух линий, то решение довольно тривиально.

Если две линии в виде Ax + By = 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; 

Меня беспокоит комментарий выше, что говорит, что есть только одна нарисованная линия. Я не уверен, что вы имеете в виду. Означает ли это, что приложение предоставляет одну строку, а пользователь - другую, или мы имеем дело с изогнутыми линиями, где линия пересекает себя?

+0

Это на самом деле вторая «кривые линии, где линия пересекает себя» .. – mica

+0

очень интересная проблема !!! Это единственный способ, которым я могу это сделать, но я не уверен, что он будет очень эффективным по коду. Я уверен, что существует ряд оптимизаций, которые устраняют необходимость попробовать явно непересекающиеся линии. Любая изогнутая линия может быть аппроксимирована, разбивая ее на несколько сегментов линии. Затем программа могла бы проходить через них, чтобы увидеть, пересекается ли какой-либо из сегментов линии. –

+0

дальнейшее уточнение .... если бы мы сломали кривую на 10 сегментов линии, то вы бы использовали выше на s1-s2, затем s1-s3, сравнивая s1 с другими сегментами, затем s2 со всеми остальными сегментами и так далее , К сожалению, это работает примерно в n * n раз, поэтому производительность не будет большой. –

Смежные вопросы