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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.09.2006, 14:58
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 11  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
Вообщем у тебя два выхода:
1 простой и не понятный см. пост №5. Я плохо пояснил. Суть в том что луч соединяющий точку и вершину не может пересекать ни одну из сторон треугольника. Исключая вершины. Для этого тебе нуно написать функцию для определения пересечения двух отрезков по координатам их ограничивающих точек (кстати не тривиальная задача)
2. Понятный, но сложный:
Точка принадлежит выпуклой фигуре в том случае если каждая проекция точки на каждую сторону фигуры, лежит между вершинами принадлижащими этой стороне. Для этого нужно строить перпендикуляры.
Кстати у INils'а без перпендикуляров то же не обойтись.
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©


Последний раз редактировалось miramax; 21.09.2006 в 15:03.
Старый 21.09.2006, 15:05
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 12  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от miramax
Кстати у INils'а без перпендикуляров то же не обойтись.
Если я не ошибаюсь, достаточно знать порядок обхода точек треугольника и тогда по углу между точк-точка1_вектора и точка1_вектора-точка2_вектора можно узнать слева или справа от вектора точка.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
Цитата:
а чем вас не устраивает метод scourge ' kangaroo?
s0 >= (s1+s2+s3)??
эта формула не сработает если представить себе маленький треугольничек от которого оттащили мышку на километр
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©

Старый 21.09.2006, 15:59
scourge ' kangaroo вне форума Посмотреть профиль Отправить личное сообщение для scourge ' kangaroo Посетить домашнюю страницу scourge ' kangaroo Найти все сообщения от scourge ' kangaroo
  № 15  
Ответить с цитированием
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;

function onEnterFrame(){
_root.clear()
getlocation(aX, aY, bX, bY, cX, cY, _xmouse, _ymouse)
}

// Проверяем, принадлежит ли точка треугольнику
function getlocation(aX, aY, bX, bY, cX, cY, fX, fY){
// Находим площадь главного треугольника
s0 = getsquare(aX, aY, bX, bY, cX, cY)
// Соединяем вершины треугольника с точкой и находим площади маленьких треугольников
s1 = getsquare(fX, fY, aX, aY, bX, bY)
s2 = getsquare(fX, fY, aX, aY, cX, cY)
s3 = getsquare(fX, fY, bX, bY, cX, cY)
// Принадлежит?
if(Math.round(s0) == Math.round((s1+s2+s3))){
	_root.beginFill(0x6794A7);
}else{
	_root.beginFill(0x000000);
}
_root.lineStyle(0, 0xFFFFFF);
_root.moveTo(aX,aY);
_root.lineTo(bX,bY);
_root.lineTo(cX,cY);
_root.lineTo(aX,aY);
}

// Узнаём площадь треугольника
function getsquare(aX, aY, bX, bY, cX, cY){
// 1. Находим длины сторон
aD = getlength(aX, aY, bX, bY)
bD = getlength(bX, bY, cX, cY)
cD = getlength(cX, cY, aX, aY)
// 2. Находим полупериметр
p = (aD + bD + cD)/2
// 3. Находим площадь
S = Math.sqrt(p * (p - aD) * (p - bD) * (p - cD))
return(S)
}

function getlength(aX, aY, bX, bY){
xd = aX - bX
yd = aY - bY
return(Math.sqrt(xd*xd+yd*yd));
}

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

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


Последний раз редактировалось iNils; 21.09.2006 в 16:13.
Старый 21.09.2006, 16:42
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 17  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Вот теперь все в полном виде.
Вложения
Тип файла: zip treu2.zip (7.5 Кб, 10 просмотров)
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 21.09.2006 в 17:59.
Старый 22.09.2006, 12:03
goarcade вне форума Посмотреть профиль Отправить личное сообщение для goarcade Найти все сообщения от goarcade
  № 18  
Ответить с цитированием
goarcade

Регистрация: Sep 2006
Сообщений: 32
Код:
//px,py- координаты точки
//ax,ay,bx,by,cx,cy -треугольник abc
_hitTest = function (px, py, ax, ay, bx, by, cx, cy) {
	var ab=(px-bx)*(ay-by)+(py-by)*(bx-ax)
	var bc=(px-cx)*(by-cy)+(py-cy)*(cx-bx)
	var ca=(px-ax)*(cy-ay)+(py-ay)*(ax-cx)
	if ((ab<0 && bc<0 && ca<0)||(ab>0 && bc>0 && ca>0)) {
		return true;
	} else {
		return false;
	}
};

Старый 22.09.2006, 12:38
whiteRed вне форума Посмотреть профиль Отправить личное сообщение для whiteRed Найти все сообщения от whiteRed
  № 19  
Ответить с цитированием
whiteRed
 
Аватар для whiteRed

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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