![]() |
|
Модераторы: volvo877, Snowy, MetalFan |
![]()
|
|
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Так. Суть задачи. Юзер задает координаты ( x, y ) трех точек, которые являются вершинами треугольника. Затем юзверь задает еще одну точку, чтобы узнать, лежит эта точка внутри треугольника или нет. Цель программы - сказать об этом.
Мой алгоритм работы: 1. Принимаем координаты четырех точек (координаты целого типа). 2. Вычисляем значение трех сторон главного треугольника по формуле MM = Sqrt( Sqr( x2 - x1 ) + Sqr( y2 - y1 ) ) (формула для вычисления расстояния между двумя точками). 3. Вычисляем периметр треугольника и площадь (площадь по формуле Герона: S = Sqrt( p * ( p - a ) * ( p - b ) * ( p - c ) ), где p - полупериметр). 4. Затем смысл - если точка лежит внутри нашего треугольника, то сумма площадей трех треугольников, на которые точка может разбить главный треугольник, будет равна только что вычисленной площади. Если она не равна, то точка не лежит в треугольнике.
Есть контрольные значения, по которым можно проверить работу программы. Если вершины заданы как ( 0; 0 ), ( 3; 0 ), ( 0; 4 ), а точка как ( 1; 1 ), то точка должна лежать внутри треугольника. Если вершины те же самые, а точка задана как ( 2; 0 ), то точка тоже лежит внутри треугольника. Если вершины те же самые, но точка с координатами ( 6; 6 ), то точка лежит ВНЕ треугольника. Из всех трех условий выполняется в моей программе только первое. Где ошибка? Это сообщение отредактировал(а) sim7 - 7.11.2006, 16:26 |
|||
|
||||
| MBo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: нет Всего: 18 |
можно проще. Даны точки A,B,C и P
Раскладываем вектор AP по векторам AB и AC, например, так: http://www.college.ru/mathematics/courses/...dels/basis.html AP = l*AB+m*AC если l>=0, m>=0 и l+m<=1 то точка внутри А часто используемый общий способ определения, лежит ли точка в многоугольнике, состотит в проведении луча из точки и определении четности числа пересечений со сторонами. Это сообщение отредактировал(а) MBo - 7.11.2006, 17:11 |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Слегка поправили, но все еще не работает:
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
alexeis1, спасибо! Путем долгих изысканий. Все работает.
|
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
А как насчёт варианта расчёта площади без линий (в одну строчку):
|
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Что-то не понял, Zero. Саму формулу не понял. Как она читается словами?
|
|||
|
||||
| MBo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: нет Всего: 18 |
Попроще маленько
|
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
sim7, словами она не читается... Это:
Я её преобразовал, обычными математическими выражениями на листке. Сканера у меня нет (расчёты выложить не смогу), да и сложного в ней тоже ни чё нет, просто я её перевёл, из формулы площади для ABC, в фор-лу для координат, каждой точки. (Из определителя матрицы площади короче) Добавлено @ 18:29 Для понимания, или описания на языке + потом расчёта её в структуре памяти... Это сообщение отредактировал(а) Zero - 7.11.2006, 18:31 |
|||
|
||||
| MBo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: нет Всего: 18 |
Zero,
>Для понимания, или описания на языке + потом расчёта её в структуре памяти... Не уловил смысла фразы |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Ну всмысле проще относительно какого варианта, моего или ещё чиё нибудь...
(и за счёт чего эта упрощённость осуществляется?) |
|||
|
||||
| sofware |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 30.11.2006 Репутация: нет Всего: 1 |
А вот мой код:
Это сообщение отредактировал(а) volvo877 - 1.12.2006, 11:51 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
sofware, не забывайте выделять код.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "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. |