IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Как узнать принадлежность
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


как узнать принадлежит ли точка к треугольнику (находится ли она в нем) или нет!
Зарание спасибо!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


http://algolist.manual.ru/maths/geom/belong/poly2d.php
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Спасибо конечно, но мне там не все понятно, и тмболее как я понял там написанно на СИ, можно ли написать формулу, алгоритм на дэлфи.
Зарание спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Поиск: Принадлежность точки многоугольнику
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


к сожадению я не понимаю этот алгоритм, моет ест что-нибудь по проще? unsure.gif unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


program point_in_treug;
const _eps = 1E-7;
type TPoint = record
x,y : real;
end;

var a,b,c,p : TPoint;
s,s1,s2,s3 : real;

function sq_treug(a,b,c : TPoint) : real;
begin
sq_treug := (a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y)) / 2;
end;

begin
read(a.x,a.y);
read(b.x,b.y);
read(c.x,c.y);
read(p.x,p.y);
s := abs (sq_treug(a,b,c));
s1 := abs (sq_treug(a,b,p));
s2 := abs (sq_treug(a,p,c));
s3 := abs (sq_treug(p,b,c));
if abs (s - s1 - s2 - s3) < _eps then writeln('point is inside the triangle')
else writeln('point is outside the triangle');
end.


функция sq_treug вычисляет ориентированную площадь треугольника. Соответственно если точка p вне треугольника то сумма площадей треугольников abp ,apc ,pbc бедет больше площади abc ,иначе площади будут равны.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






virt, уверен, что это будет работать ВСЕГДА? Я - нет... Доказать?

А тебе, kojan: попроще- попроси пользователя проверить на бумаге, и нажать на Y если точка внутри, и на N если точка - снаружи... Что значит "непонятно"? Есть алгоритм, и его нельзя сделать "проще" или "сложнее"... Не понимаешь - бери другое задание...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


уверен ,докажи..


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


там могут быть ошибки только из-за нехватки точности.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






А есть графическое решение сей же задачи?
Я знаю что оно есть, но не помню его unsure.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Если знаешь - чего спрашиваешь?

А теперь вопрос к тебе: Что значит "графическое решение"? Входные/выходные данные для него приведи...
"типа, на экране прямая, чуть ниже и левее точка, ..."

Все равно тебе придется решать аналитически.
Если ты про ВИЗУАЛИЗАЦИЮ - то по предложенному алгоритму ее и напишешь...


P.S. Насчет графического решения: ТЫ на бумаге сможешь решить эту задачу графически? Вот когда решишь, тогда и пытайся объяснить это компьютеру...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата(volvo @ 2.03.2006 11:35) *

Если знаешь - чего спрашиваешь?

А теперь вопрос к тебе: Что значит "графическое решение"? Входные/выходные данные для него приведи...
"типа, на экране прямая, чуть ниже и левее точка, ..."

Все равно тебе придется решать аналитически.
Если ты про ВИЗУАЛИЗАЦИЮ - то по предложенному алгоритму ее и напишешь...
P.S. Насчет графического решения: ТЫ на бумаге сможешь решить эту задачу графически? Вот когда решишь, тогда и пытайся объяснить это компьютеру...

Я знаю, но не помню, вот премерный алгоритм:
Задача решалась методом заливки треугольника, и определением цвета точки, если цвет совпадал с цветом заливки, то точка соответственно лежит, если нет-то нет, только я вот не могу придумать из какой точки заливать треугольник, нужна формула для точки которая точно будет лежать в произвольном треугольнике, т е т пересечения бесиктрис, а как найти её координаты, если имеешь координаты вершин?
Вот в этом и весь вопрос!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Цитата(virt @ 26.11.2005 10:35) *

program point_in_treug;
const _eps = 1E-7;
type TPoint = record
x,y : real;
end;

var a,b,c,p : TPoint;
s,s1,s2,s3 : real;

function sq_treug(a,b,c : TPoint) : real;
begin
sq_treug := (a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y)) / 2;
end;

begin
read(a.x,a.y);
read(b.x,b.y);
read(c.x,c.y);
read(p.x,p.y);
s := abs (sq_treug(a,b,c));
s1 := abs (sq_treug(a,b,p));
s2 := abs (sq_treug(a,p,c));
s3 := abs (sq_treug(p,b,c));
if abs (s - s1 - s2 - s3) < _eps then writeln('point is inside the triangle')
else writeln('point is outside the triangle');
end.

Мона пояснение к сеёму, а то начинающим не особо понятно unsure.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата(Гость @ 5.03.2006 21:14) *

Мона пояснение к сеёму, а то начинающим не особо понятно unsure.gif

а разве если просто сравнить с нулём модуль разности площадей, то это не точнее будет? blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






эта программа имеет недостаточную точность. попробуйте ввести A1(0,0),A2(1,1),A3(0,1) и координаты точки(1.00001;0) эта программа будет писать что точка внутри треугольника а на самом деле она вне его. КТО-НИБУДЬ исправте чтоб было ТОЧНЕЕ
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






blink.gif
Цитата(Console)
Running
0
0
1
1
0
1
1.00001
0
point is outside the triangle
Какие проблемы?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






теперь понял в чем у меня были проблемы не надо менять" if abs (s - s1 - s2 - s3)<_eps" на " if abs (s - s1 - s2 - s3)=0" тогда все будет в порядке спс всем очень хороший сайт
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 10:17
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name