Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.09.2006, 12:40
scourge ' kangaroo вне форума Посмотреть профиль Отправить личное сообщение для scourge ' kangaroo Посетить домашнюю страницу scourge ' kangaroo Найти все сообщения от scourge ' kangaroo
  № 1  
Ответить с цитированием
scourge ' kangaroo
[1.3 07.09.2006]
[3 28.09.2006]
[+1 04.10.2006]
 
Аватар для scourge ' kangaroo

Регистрация: Sep 2005
Сообщений: 390
Отправить сообщение для scourge ' kangaroo с помощью ICQ
По умолчанию принадлежит ли точка треугольнику

нужно узнать, принадлежит ли точка треугольнику.
написал код, он он работает не точно. т.е. функция не возвращает истину, когда точка рядом со стороной треугольника.
Подскажите пожалуйста, в чём ошибка...

Код:
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)
}

Старый 21.09.2006, 13:10
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А зачем ты переопределяешь hitTest?

Старый 21.09.2006, 13:12
scourge ' kangaroo вне форума Посмотреть профиль Отправить личное сообщение для scourge ' kangaroo Посетить домашнюю страницу scourge ' kangaroo Найти все сообщения от scourge ' kangaroo
  № 3  
Ответить с цитированием
scourge ' kangaroo
[1.3 07.09.2006]
[3 28.09.2006]
[+1 04.10.2006]
 
Аватар для scourge ' kangaroo

Регистрация: Sep 2005
Сообщений: 390
Отправить сообщение для scourge ' kangaroo с помощью ICQ
т.е.?


Последний раз редактировалось scourge ' kangaroo; 21.09.2006 в 13:17.
Старый 21.09.2006, 13:33
whiteRed вне форума Посмотреть профиль Отправить личное сообщение для whiteRed Найти все сообщения от whiteRed
  № 4  
Ответить с цитированием
whiteRed
 
Аватар для whiteRed

Регистрация: Nov 2004
Сообщений: 187
Отправить сообщение для whiteRed с помощью ICQ
интересно ты длины сторон вычисляешь
__________________
С моих слов записано верно. Мною прочитано.

Старый 21.09.2006, 13:39
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 5  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
Цитата:
Сообщение от scourge ' kangaroo
нужно узнать, принадлежит ли точка треугольнику.
написал код, он он работает не точно. т.е. функция не возвращает истину, когда точка рядом со стороной треугольника.
Подскажите пожалуйста, в чём ошибка...
Алгоритм у тебя оригинальный, но не верный.
Могу подсказать, код писать долго придётся скажу сразу Сейчас вот, нарисовал треугольник и теоремку придумал
"Если точка принадлежит треугольнику, то все лучи соединяющие точку и проходящие через вершины треугольника, пересекают только две прямые , которым принадлежат стороны треугольника, из трёх. Причём точка пересечения лежит в точке пересечения этих дву прямых. Короче вершина там и две прямые с лучом из точки пересекаются. Если луч ,кроме одной вершины треугольника, пересекает ещё хотя бы одну прямую, которой принадлежит любая сторона треугольника или другую вершину. Тогда точка лежит вне треугольника."
Помоему через углы можно решить ещё. А ещё через стороны. Ведь с данными сторонами существует лишь один 1 треугольник
З.Ы. - это применимо ТОЛЬКО к треугольнику
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©


Последний раз редактировалось miramax; 21.09.2006 в 14:33.
Старый 21.09.2006, 14:18
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от scourge ' kangaroo
т.е.?
hitTest — метод MovieClip. Ты его переопределяешь. Назови функцию по-другому.

Старый 21.09.2006, 14:19
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Точка пренадлежит треугольнику, если она лежит слева от всех векторов составляющих этот треугольник (при соответствующем обходе его)
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.09.2006, 14:49
scourge ' kangaroo вне форума Посмотреть профиль Отправить личное сообщение для scourge ' kangaroo Посетить домашнюю страницу scourge ' kangaroo Найти все сообщения от scourge ' kangaroo
  № 8  
Ответить с цитированием
scourge ' kangaroo
[1.3 07.09.2006]
[3 28.09.2006]
[+1 04.10.2006]
 
Аватар для scourge ' kangaroo

Регистрация: Sep 2005
Сообщений: 390
Отправить сообщение для scourge ' kangaroo с помощью ICQ
всем спасибо за помомощь! (:

Цитата:
Сообщение от whiteRed
интересно ты длины сторон вычисляешь
проверил, ошибка именно в этом...
подскажите, как узнать длину отрезка зная его точки?

Старый 21.09.2006, 14:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от scourge ' kangaroo
подскажите, как узнать длину отрезка зная его точки?
Код:
xd = x1-x2;
yd = y1-y2;
l = Math.sqrt(xd*xd+yd*yd);
5-ый класс.

Старый 21.09.2006, 14:56
scourge ' kangaroo вне форума Посмотреть профиль Отправить личное сообщение для scourge ' kangaroo Посетить домашнюю страницу scourge ' kangaroo Найти все сообщения от scourge ' kangaroo
  № 10  
Ответить с цитированием
scourge ' kangaroo
[1.3 07.09.2006]
[3 28.09.2006]
[+1 04.10.2006]
 
Аватар для scourge ' kangaroo

Регистрация: Sep 2005
Сообщений: 390
Отправить сообщение для scourge ' kangaroo с помощью ICQ
спасибо! Теперь всё как часы работает...
в школе я двоечником был...


Последний раз редактировалось scourge ' kangaroo; 21.09.2006 в 15:05.
Создать новую тему Ответ Часовой пояс GMT +4, время: 15:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:14.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.