![]() |
Модераторы: volvo877, Snowy, MetalFan |
![]() ![]() ![]() |
|
Irisha |
|
|||
Unregistered |
Пусть даны вещественные числа x1,x2,x3,y1,y2,y3.Принадлежит ли начало координат треугольнику с вершинами (x1,y1),(x2,y2),(x3,y3)?
![]() Добавлено @ 15:30 решите задачу... |
|||
|
||||
Guest |
|
|||
Unregistered |
Irisha
Эдак вас всех......брррррррр. Математику учить надо, а не программирование Векторы в школе проходили? |
|||
|
||||
Garabar |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 15.9.2004 Репутация: нет Всего: 1 |
Ну например так, хоть эт внатуре и не программирование суть
Первое, Для того что бы начало координат преналжело треугольнику необхадимо что бы одна или несколколько из его сторон пересекали ось обцисс и ординат хотябы один раз, соответсвенно для этого те надо проверять выполняица это условие или нет. Второе, Для проверки этого условия те нужно проверить x1*x2>0 еесли истинно то между этими вершинами обцисс не пересекает, для ординат анологично y1*y2>0. третье, Ну и потом перебираешь все варианты (их три кстати) до тех пор пока не либо они не конаться либо не выполница кождое из условий хотябы по одному разу.... |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Garabar
Господи, зачем так сложно. Если начало координат лежит внутри треугольника, то начало координат и одна вершина лежат по одну сторону от прямой, определяемой остальными вершинами. Проверяется это элементарно - если в пределах от -пи до +пи синусы углов 120 и 123 имеют одинаковый знак для любого порядка нумерования точек, то внутри. По координатам посчитать синус - дело плевое... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Garabar |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 15.9.2004 Репутация: нет Всего: 1 |
|
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
1) не paskal, a Pascal
2)
Может и ошибаюсь, но вроде так... |
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
ОШИБАЮСЬ!!!
Лохонулся я вчера: после трех пар математичесого анализа и одной пары линейной алгебры мозги не хотели работать Вот примерчик:
|
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Доработанный вариант:
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Pakshin A. S.
сплошные деления на нуль при совпадении x или y у двух точек... Garabar
во-первых, сисинус считается исключительно вычитаниями и делениями. Во-вторых, достаточно получить его знак. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Garabar |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 15.9.2004 Репутация: нет Всего: 1 |
Akina
Хе) ну что бы получить его знак его нужно пасчитать.... А во вторых что бы пасчитать синус нужно я думаю больше раза поделить(или умножить)))) |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Pakshin A. S., как этим пользоваться ? У меня все время "Да"... + Иногда вылетает Floating Point - ошибка...
![]() Вот мой вариант: Если начало координат принадлежит треугольнику (внутри треугольника, или на сторонах), то треугольник должен пересекать обе оси Ox и Oy с двух сторон (на положительной и отрицательной частях)...
-------------------- С уважением, г-н Посол. |
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Я пытаюсь рассмотреть позицию точки по отношению к прямым через уравнение прямой, проходящей через две точки
y-y1=(y2-y1)(x-x1)/(x2-x1)... Да видимо мысль не туда пошла... ![]() |
|||
|
||||
ДЫМ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 6.1.2004 Репутация: нет Всего: 8 |
В RXLibrary есть функция (сечас не помню точно как называется), вот она
возвращает True, если точка лежит внутри многоугольника. |
|||
|
||||
EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
ДЫМ , Да? А я помнится сам её корябал... Заманался, честно говоря.
-------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
небольшое уточнение: необходимо проверять не для одной из вершин, а для всех (хотя, может, я неправильно прочитал, и именно это и имелось в виду) небольшая модификация: 1. точка лежит внутри треугольника тогда и только тогда, когда при обходе его она всегда лежит с одной стороны (это верно вообще для всех выпуклых полигонов) 2. для того, чтобы определить, с какой стороны лежит точка от прямой, достаточно определить знак угла (если считать его между -180 и +180) между направляющим вектором прямой и вектором от одной из точек прямой к исследуемой точке 3. для определения знака угла в интервале (-180, +180) достаточно определить знак синуса 4. как было справедливо замечено для подсчета синуса между двумя векторами на плоскости достаточно нескольких арифметических операций: просто добавляем к каждому вектору третью нулевую координату z и считаем их векторное произведение и так алгоритм такой:
под обозначением ABxAO понимается следующее: a=B1-A1 b=B2-A2 c=O1-A1 d=O2-A2 ABxAO=a*d-b*c -------------------- qqq |
||||
|
|||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
честно говоря, не проверял (нету у меня на машине Delphi) -------------------- qqq |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi" | |
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |