Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Вниз

Точка пересечения отрезков прямых   Найти похожие ветки 

 
Iam   (2007-12-17 12:25) [0]

у кого есть готовое?
отрезки задаются точками, система координат не школьная, а обычная для программирования


 
Рамиль ©   (2007-12-17 12:25) [1]


> система координат не школьная, а обычная для программирования

Пять баллов.


 
@!!ex ©   (2007-12-17 12:27) [2]

> [0] Iam   (17.12.07 12:25)

В инете есть готовое...

Могу и я подсказать... Если объяснишь что такое обычная система координат...
Потому что моя "обычная" от школьной не отличается...


 
Правильный_Вася   (2007-12-17 12:34) [3]

это на баш!


 
oldman ©   (2007-12-17 12:43) [4]

Не понял в чем проблема?
Даны координаты 4 точек? Решение:

1. Если для каждой прямой есть координаты двух точек, строим ее уравнение.
2. Есть уравнения двух прямых. Находим точку их пересечения.
3. Есть координаты точки. Проверяем, лежит ли она на отрезках.

Ну а формулы ты уж сам...


 
boa_kaa ©   (2007-12-17 12:44) [5]

/// <summary>
/// Точка пересечения векторов AB и CD
/// </summary>
/// <param name="a">Точка a</param>
/// <param name="b">Точка b</param>
/// <param name="c">Точка c</param>
/// <param name="d">Точка d</param>
/// <returns>Точка пересечения</returns>
public static Point2D IntersectionPoint(Point2D a, Point2D b, Point2D c, Point2D d)
{
   double x1 = a.m_x, x2 = b.m_x, x3 = c.m_x, x4 = d.m_x;
   double y1 = a.m_y, y2 = b.m_y, y3 = c.m_y, y4 = d.m_y;
   double k2 = (x4 - x3) * (y2 - y1) - (y4 - y3) * (x2 - x1);
   if (Utils.FuzzyEquals(k2, 0.0))
       return new Point2D(Double.PositiveInfinity, Double.PositiveInfinity);
   double k1 = (x1 - x3) * (y4 - y3) - (y1 - y3) * (x4 - x3);
   return new Point2D(x1 + k1 * (x2 - x1) / k2, y1 + k1 * (y2 - y1) / k2);
}


извини, что система координат школьная и код на шарпе, и все такое...
но вот только объясни, что в школе не объясняли, как найти уравнение прямой?


 
boriskb ©   (2007-12-17 13:07) [6]

> [5] boa_kaa ©   (17.12.07 12:44)


Такие посты надо удалять как издевательство в извращенной форме.


 
Дуболом   (2007-12-17 13:08) [7]

1. A,B
2. C,D

iif(S(A,B,C)*S(A,B,D)<0 && S(C,D,A)*S(C,D,B)<0),cross,not cross);


 
Iam   (2007-12-17 13:46) [8]

boa_kaa ©   (17.12.07 12:44) [5]
в таком варианте точка пересечения имеет большие координаты, но исключения нет
как определить из твое кода когда нет пересечения?

Private Function IntersectionPoint(ByVal a As Point, ByVal b As Point, ByVal c As Point, ByVal d As Point) As Point
       "a.Y = -a.Y
       "b.Y = -b.Y
       "c.Y = -c.Y
       "d.Y = -d.Y

       Dim x1 As Integer = a.X
       Dim x2 As Integer = b.X
       Dim x3 As Integer = c.X
       Dim x4 As Integer = d.X

       Dim y1 As Integer = a.Y
       Dim y2 As Integer = b.Y
       Dim y3 As Integer = c.Y
       Dim y4 As Integer = d.Y

       Dim k2 As Double = (x4 - x3) * (y2 - y1) - (y4 - y3) * (x2 - x1)

       Text = k2.ToString
       "If Math.Abs(k2) < 0.0001 Then Throw New ArgumentException("нету пересечения")

       Dim k1 As Single = (x1 - x3) * (y4 - y3) - (y1 - y3) * (x4 - x3)

       Dim x As Single = CType(x1 + k1 * (x2 - x1) / k2, Single)
       Dim y As Single = CType(y1 + k1 * (y2 - y1) / k2, Single)

       Dim p As Point = Point.Truncate(New PointF(x, y))
       "p.Y = -p.Y
       Return p
   End Function

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim p1 As New Point(10, 20)
       Dim p2 As New Point(80, 200)

       Dim p3 As New Point(50, 20)
       Dim p4 As New Point(150, 200)

       Dim p As Point

       p = IntersectionPoint(p1, p2, p3, p4)

       Dim g As Graphics = Me.CreateGraphics
       g.DrawLine(Pens.Red, p1, p2)
       g.DrawLine(Pens.Green, p3, p4)

       g.FillEllipse(Brushes.Blue, p.X - 5, p.Y - 5, 10, 10)

       g.Dispose()
   End Sub


 
Iam   (2007-12-17 13:50) [9]

"If Math.Abs(k2) < 0.0001 Then Throw New ArgumentException("нету пересечения")
надо раскоменнтировать

вообщем пересечение посмотрел находит, но вот как отловить отсутствие пересечения в твоём коде? в приведенном варианте кода отрезки не пересекаются, но исключения нету


 
Iam   (2007-12-17 13:52) [10]

вот почему я и спрашиваю
нужен ОТЛАЖЕННЫЙ код ТИПОВОЙ задачи!


 
@!!ex ©   (2007-12-17 13:54) [11]

> [10] Iam   (17.12.07 13:52)

А мне деньги нужны...
Договоримся?


 
Iam   (2007-12-17 14:01) [12]

@!!ex ©   (17.12.07 13:54) [11]
ты тут получал неоднократно готовые решения)чьё бы мычало)


 
@!!ex ©   (2007-12-17 14:05) [13]

> [12] Iam   (17.12.07 14:01)

Не вопрос, конечно получал, и давал готовые решения.
Однако я никогда ни с кого не требовал отлаженный код типовой задачи.
И уж тем более не требовал то, что гуглится без проблем.


 
Юрий Зотов ©   (2007-12-17 14:08) [14]

> Iam   (17.12.07 13:52) [10]
> нужен ОТЛАЖЕННЫЙ код ТИПОВОЙ задачи!

Задача сводится к составлению и решению системы двух линейных уравнений с двумя неизвестными. Ее решение проходят в школе и оно элементарно. Поэтому "отлаженный код типовой задачи" пишется максимум за полчаса.

Следовательно - вперед и с песней. Будут конкретные вопросы - спрашивайте, Вам обязательно помогут.


 
Дуболом   (2007-12-17 14:15) [15]

1. A,B AB = At1 + (1-t1)B
2. C,D CD = Ct2 + (1-t2)D

system of linear equation

iif(abs(t1)<=1 && abs(t2)<=1,cross,not cross)


 
Дуболом   (2007-12-17 14:19) [16]

equations


> iif(abs(t1)<=1 && abs(t2)<=1,cross,not cross)


iif(t1<=1 && t2<=1 && t1>=0 && t2>=0,cross,not cross)


 
boa_kaa ©   (2007-12-17 15:47) [17]


> Iam   (17.12.07 13:46) [8]

Я привел реальный отлаженный механизм, который использую в алгоритме триангуляции. Отследить параллельность/коллениарность можно по параметру k2

if (Utils.FuzzyEquals(k2, 0.0))

это

if (k2 == 0.0)

только с заданной точностью.

0 - это линии параллельны/коллинеарны . Точнее сказать - нужны дополнительные проверки.


> boriskb ©   (17.12.07 13:07) [6]

не понял суть придирки


 
boa_kaa ©   (2007-12-17 15:57) [18]


> Iam   (17.12.07 13:46) [8]

А так пересекаться должны отрезки или прямые?


 
boriskb ©   (2007-12-17 15:59) [19]

> не понял суть придирки

Не к тебе лично (упаси Боже) а к такого вида постам.

Вроде как сайт предназначен для оказания помощи программистам.
Какую помощь оказывают подобные посты?
Исключительно вред.
Причучают к ленности ума и ничего более.

А если он завтра попросит зад себе подтереть? (прошу прощения у присутствующих дам)


 
boa_kaa ©   (2007-12-17 16:04) [20]


> boriskb ©   (17.12.07 15:59) [19]

ааа, теперь понял :)
я просто был только пообедамши и в добром расположении духа :)


 
Дуболом   (2007-12-17 17:28) [21]

boa_kaa ©   (17.12.07 15:57) [18]
Пересечение векторов - это вообще нонсенс.
Твоя программа и дает только ответ в случае отрезков, и если отрезки персекаются, если же нет - она чудит, о чем и заметил автор.


 
boa_kaa ©   (2007-12-17 17:46) [22]


> Дуболом   (17.12.07 17:28) [21]

я вообще никакой программы здесь не писал. Я описал один метод, который вернет точку пересечения прямых, проходящих через точки. Вернет корректно. Если у тебя есть другие соображения на этот счет - я не виноват.

Автор использовал отрывок из моего кода, но привел его по координатам к целому типу. Объяснять еще и это? Нет уж, увольте.


 
Iam   (2007-12-17 20:01) [23]

boa_kaa ©   (17.12.07 17:46) [22]
код не работает где ещё даже целые числа не используются...
(исключение не выбрасывается....)
целые числа только в конце и это не играет критичной роли...просто точность понижает...
короче нарно те фартило что не слетало....


 
Дуболом   (2007-12-18 05:59) [24]

> Iam   (17.12.07 20:01) [23]

Ему не фартило. Он другую задачу решал. Он искал точку пересечения прямых заданных парами точек. И находил. Направление решения я вам дал. Дерзайте.


 
boa_kaa ©   (2007-12-18 22:02) [25]


> Iam   (17.12.07 20:01) [23]
> короче нарно те фартило что не слетало....

Это уже наглость, за это бить можно. Ремнем.


 
Palladin ©   (2007-12-18 22:04) [26]

гы... подвешивание на крюках над кипящим маслом до полного просветления своей неосознасто :)


 
boa_kaa ©   (2007-12-18 22:46) [27]


> Palladin ©   (18.12.07 22:04) [26]
> гы... подвешивание на крюках над кипящим маслом до полного
> просветления своей неосознасто :)

ужасть какая! :)



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.136 c
11-1182819162
SPeller_work
2007-06-26 04:52
2008.01.27
Реализация интерфейсов


15-1197930230
Иксик
2007-12-18 01:23
2008.01.27
Москва. Гостиница для иностранца


15-1198051992
ПЛОВ
2007-12-19 11:13
2008.01.27
Помогите обмануть инсталлятор


2-1198773556
art36
2007-12-27 19:39
2008.01.27
Как сохранять загруженные в программу картинки? Точнее...


15-1198244312
Семен Сурков
2007-12-21 16:38
2008.01.27
Вопрос по Last-Modified.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский