![]() |
|
||||||||||
|
|||||
|
[1.3 07.09.2006]
[3 28.09.2006] [+1 04.10.2006] |
нужно узнать, принадлежит ли точка треугольнику.
написал код, он он работает не точно. т.е. функция не возвращает истину, когда точка рядом со стороной треугольника. Подскажите пожалуйста, в чём ошибка... aX = 120; aY = 100;
bX = 100; bY = 130;
cX = 140; cY = 130;
_root.lineStyle(0, 0xFFFFFF);
_root.moveTo(aX,aY);
_root.lineTo(bX,bY);
_root.lineTo(cX,cY);
_root.lineTo(aX,aY);
function onEnterFrame(){
hitTest(aX, aY, bX, bY, cX, cY, _xmouse, _ymouse)
}
// Проверяем, принадлежит ли точка треугольнику
function hitTest(aX, aY, bX, bY, cX, cY, fX, fY){
// Находим площадь главного треугольника
s0 = square(aX, aY, bX, bY, cX, cY)
// Соединяем вершины треугольника с точкой и находим площади маленьких треугольников
s1 = square(fX, fY, aX, aY, bX, bY)
s2 = square(fX, fY, aX, aY, cX, cY)
s3 = square(fX, fY, bX, bY, cX, cY)
// Принадлежит?
if(s0 >= (s1+s2+s3))trace("курсор в треугольнике!")
}
// Узнаём площадь треугольника
function square(aX, aY, bX, bY, cX, cY){
// 1. Находим длины сторон
aD = Math.abs(aX - bX) + Math.abs(aY - bY)
bD = Math.abs(bX - cX) + Math.abs(bY - cY)
cD = Math.abs(cX - aX) + Math.abs(cY - aY)
// 2. Находим полупериметр
p = (aD + bD + cD)/2
// 3. Находим площадь
S = Math.sqrt(p * (p - aD) * (p - bD) * (p - cD))
return(S)
}
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А зачем ты переопределяешь hitTest?
|
|
|||||
|
[1.3 07.09.2006]
[3 28.09.2006] [+1 04.10.2006] |
т.е.?
Последний раз редактировалось scourge ' kangaroo; 21.09.2006 в 13:17. |
|
|||||
|
интересно ты длины сторон вычисляешь
__________________
С моих слов записано верно. Мною прочитано.
|
|
|||||
|
Цитата:
Могу подсказать, код писать долго придётся скажу сразу Сейчас вот, нарисовал треугольник и теоремку придумал ![]() "Если точка принадлежит треугольнику, то все лучи соединяющие точку и проходящие через вершины треугольника, пересекают только две прямые , которым принадлежат стороны треугольника, из трёх. Причём точка пересечения лежит в точке пересечения этих дву прямых. Короче вершина там и две прямые с лучом из точки пересекаются. Если луч ,кроме одной вершины треугольника, пересекает ещё хотя бы одну прямую, которой принадлежит любая сторона треугольника или другую вершину. Тогда точка лежит вне треугольника." Помоему через углы можно решить ещё. А ещё через стороны. Ведь с данными сторонами существует лишь один 1 треугольник ![]() З.Ы. - это применимо ТОЛЬКО к треугольнику Последний раз редактировалось miramax; 21.09.2006 в 14:33. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
|
|
|||||
|
[1.3 07.09.2006]
[3 28.09.2006] [+1 04.10.2006] |
всем спасибо за помомощь! (:
Цитата:
подскажите, как узнать длину отрезка зная его точки? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
|
|
|||||
|
[1.3 07.09.2006]
[3 28.09.2006] [+1 04.10.2006] |
спасибо! Теперь всё как часы работает...
в школе я двоечником был... Последний раз редактировалось scourge ' kangaroo; 21.09.2006 в 15:05. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:59. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|