Pascal
|
Guest |
Помогите пожалуцста написать программу.
даны координаты трех вершин треугольника, а также коордиыты какой-то точки. определить, принадлежит ли точка внутр. области треугольника |
|
Отправлено: 23:37, 22-10-2004 |
Пользователь Сообщения: 84
|
Профиль | Отправить PM | Цитировать Алгоритм общий для любой замкнутой фигуры (а не только для треугольника)
Строишь из этой точки луч произвольного направления и счиатешь количество пересечений со сторонами фигуры. Если пересечений четное количество (0, 2, 4...), то точка лежит вне фигуры. Если нечетное, то внутри. Для треугольника слово нечетное подразумквает только единицу. Если не понятно, могу и в формулах объяснить. |
------- Отправлено: 01:02, 23-10-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Guest |
было бы понятнее в формулах
|
Отправлено: 22:05, 24-10-2004 | #3 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Чуть-чуть оптимизации, для метода, предложенного Oaxa. Луч строите вертикальный, и "вверх". Тогда (перебором сторон треугольника) нужно будет посчитать количество сторон, которые имеют точку, лежащую между концами отрезка и имеющую x==x(точки), и у>=y(точки).
Вроде не напутал |
Отправлено: 10:24, 25-10-2004 | #4 |
mavludov
Сообщения: n/a |
хорошо, как тогда посчитать кол-во пересечений со сторонами?
Уравнение прямой написать или что? это же турбо паскаль.... не очень понятно.......... |
|
Отправлено: 17:31, 25-10-2004 | #5 |
Пользователь Сообщения: 84
|
Профиль | Отправить PM | Цитировать Пишешь цикл от 1 до трех, решаешь три системы уравнений, в каждой из которой находишь точку пересечения луча со стороной треугольника. проверяешь, лежит ли точка пересечения между концами отрезка (в смысле, между концами стороны треугольника), если лежит, то увеличиваешь счетчик пересечений на 1. Вот, собственно, и всё. Если честно, то вопрос этот очень далеко выходит за рамки программирования на паскале. Он много ближе к курсу геометрии класс этак за 8-9-й. Тем не менее, да простят меня за оффтопик, попробую вспомнить.
уравнение прямой такое: y=ax+b. что бы найти a и b (только что на трубе они и не сидели) для сторон отрезка делаешь так: a = (yк-ун)/(xк-xн) b = ук-axк = yн-axн (н - начало отрезка, к - конец) уравнение луча ты задавал сам, так что a и b тебе известны. Как очень тонко подметил hasherfrog, для удобства лучше выбирать вертикальный луч. Тогда уравнение прямой, описывающей луч будет выглядеть так (блин, хочется всё бросить и послать тебя к учебнику геометрии... или алгебры, я уж даже и не помню), для вертикальной прямой: a=0, и соответственно, уравнение принимает вид y = b Далее решаешь систему: 1: у = a(отрезка)*x + b(отезка) 2: y = b(луча) полученные x и y - и есть точка пересечения. Вы уж меня извините, многоуважаемый mavludov, но объяснять, как проверить, лежит ли точка пересечения между концами отрезка (а так же лежит ли она выше точки, из которой мы отправляли вышеуказанный луч) я не стану. Эдак мы и до букваря доберёмся. Всего наилучшего! [s]Исправлено: Oaxa, 19:09 25-10-2004[/s] |
------- Отправлено: 19:08, 25-10-2004 | #6 |
mavludov
Сообщения: n/a |
спасибо всем...
|
Отправлено: 17:56, 26-10-2004 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) | Loading | Программирование и базы данных | 41 | 20-05-2015 15:28 | |
Разное - Pascal | ManHack | Программирование и базы данных | 2 | 01-09-2009 22:50 | |
C/C++ - Pascal | c++ | Snake750 | Программирование и базы данных | 2 | 06-04-2009 21:59 | |
Delphi - pascal))) | keep21 | Программирование и базы данных | 2 | 14-05-2008 09:46 | |
Pascal | BeerMan | Программирование и базы данных | 18 | 02-03-2002 01:55 |
|