Войти
ПрограммированиеФорумГрафика

Точка в треугольнике (2 стр)

Страницы: 1 2 3 Следующая »
#15
15:21, 4 мая 2006

doc.
Чей метод: твой или Lion007?


#16
15:37, 4 мая 2006

Aut
doc.а, мой только для треугольников...

#17
17:12, 4 мая 2006

doc.
Вообще-то для подсчёта векторного произведения в 3D нужно считать определители алгебраических дополнений.
То есть 2х2 для каждой координаты! 8Р

#18
18:03, 4 мая 2006

Aut
>Чей метод: твой или Lion007?
Который я предложил.

WebErrAtor
>Вообще-то для подсчёта векторного произведения в 3D нужно считать определители алгебраических дополнений.
Что, в совокупности, является определитемем 3x3, да и определение векторного произведения обычно записывается в форме:

     | i   j   k |
AxB =|Ax  Ay  Az |
     |Bx  By  Bz |
#19
18:31, 4 мая 2006

Этот метод зависит от обхода вершин выпуклого многоугольника?

#20
19:26, 4 мая 2006

z0mbie
>Этот метод зависит от обхода вершин выпуклого многоугольника?
Нет, т.к. проверяются оба варианта направлености(оператор OR), разве, что разные стороны будут направлены в разные стороны но это уже изврат и в таком случае, разумеется, работать небудет.
Если потребовать, чтоб числа N1, N2... и т.д. были определенного знака то да, будет зависеть от направления обхода.

Прошло более 11 лет
#21
11:14, 8 мар. 2018

doc.
> A,B,C - точки треугольника, P - точка
>
> N1 = (By-Ay)*(Px-Ax) - (Bx-Ax)*(Py-Ay);
> N2 = (Cy-By)*(Px-Bx) - (Cx-Bx)*(Py-By);
> N3 = (Ay-Cy)*(Px-Cx) - (Ax-Cx)*(Py-Cy);
>
> Result = ((N1>0) and (N2>0)  and (N3>0)) or ((N1<0) and (N2<0) and (N3<0));
doc.
> метод годится нетолько для треугольника но и для любого выпуклого
> многоугольника, только добавятся соответствующие N4, N5 и т.д.
Хотел найти математическое объяснение данного метода попадания точки в N-угольник, но не знаю, как правильно он называется

#22
12:56, 8 мар. 2018

8Observer8
S(AOB)>0, S(BOC), S(AOB)+S(BOC)<S(ABC)
для выпуклого N-угольника пройтись по N-2 треугольникам

#23
(Правка: 13:32) 13:29, 8 мар. 2018

Я так понимаю, что вывод этих формул связан с определителями, векторным или скалярным произведением. В универе у нас был курс по линейной алгебре, но я не помню ничего подобного. В общем, помогите сформировать запрос для гугла, либо у вас есть хорошие ссылки в закладках. Хотело бы понять откуда у этих формул ноги растут и откуда начать танцевать.

#24
14:47, 8 мар. 2018

8Observer8
a.x*b.y-a.y*b.x
знаковая площадь треугольника на векторах a,b
если O внутри ABC то S(AOB)>0, S(BOC), S(AOB)+S(BOC)<S(ABC)
(может быть косяк со знаком изз-за порядка векторов, для гарантии проверять одинаковость знака и срав abs)
Линейная алгебра - 1й курс, в gamedev необходимо знать основы

#25
19:24, 14 мар. 2018

Aslan
> a.x*b.y-a.y*b.x
> знаковая площадь [b]треугольника[/b] на векторах a,b
Параллелограмма!
Aslan
>в gamedev необходимо знать основы
]:->

#26
(Правка: 20:38) 20:12, 14 мар. 2018

snake32
> Параллелограмма!
2х треугольников, 2 сокращается в выражении
> ]:->
неужели думаешь я этого незнаю?
ты как училка, придирающаяся к расстановке запятых

#27
(Правка: 15 мар. 2018, 8:28) 20:44, 14 мар. 2018

doc.
> A,B,C - точки треугольника, P - точка
>
> N1 = (By-Ay)*(Px-Ax) - (Bx-Ax)*(Py-Ay);
> N2 = (Cy-By)*(Px-Bx) - (Cx-Bx)*(Py-By);
> N3 = (Ay-Cy)*(Px-Cx) - (Ax-Cx)*(Py-Cy);
>
> Result = ((N1>0) and (N2>0) and (N3>0)) or ((N1<0) and (N2<0) and (N3<0));
doc.
> метод годится нетолько для треугольника но и для любого выпуклого
> многоугольника, только добавятся соответствующие N4, N5 и т.д.
Этот алгоритм попадания точки в треугольник работает. Я написал его реализацию на JavaScript + CanvasAPI. Кликом левой кнопкой мыши добавляется объект, кликом правой кнопки мыши объекты удаляются. Демка + исходники: https://plnkr.co/edit/w13ENpnYGsDAdtVBw8aI?p=preview

#28
0:56, 15 мар. 2018

Ещё есть один способ, сумма углов в треугольнике ВСЕГДА равна 180 градусам.

#29
(Правка: 3:25) 3:25, 15 мар. 2018

для 3д можно так:

bool is_inside
for(int i = 0; i < 3; i++)
{
  is_inside = is_inside && (dot(cross(p[(i + 1) % 3] - p[i], n), point - p[i]) > 0.0f);
}
здесь на самом деле проверяется попадание точки point в бесконечную призму, на рёбрах которой лежат точки p[ i ] с образующей n. в случае n = cross(p[2] - p[0], p[1] - p[0]) и гарантии, что point лежит в той же плоскости, что и точки, формула возвращает принадлежность точки треугольнику. с точностью до знака — лень думать, должно быть > 0.0f или < 0.0f.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика