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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.12.2011, 02:16
bookin вне форума Посмотреть профиль Отправить личное сообщение для bookin Найти все сообщения от bookin
  № 1  
Ответить с цитированием
bookin

Регистрация: Mar 2011
Сообщений: 53
По умолчанию узнать кто первый в гонке

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

ув. artcraft предложил использовать линии безье, хотел бы спросить, правильно ли я понял, мне нужно с помощью линии безье повторить трассу, а затем проверять по координатам "машины" участника в гонке, где именно находится на этой линии он, что бы узнать расстаяние от начала линии до данных координат?

возмодно у кого нить есть еще варианты спасибо

Старый 11.12.2011, 03:37
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 2  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Цитата:
еще была мысль с координатами но развить ее не удается
в чем проблема? переводите декартовы коры в полярные и сравниваете угол.
Пусть (0,0) в центре трассы, тогда a=arctg(y/x)+PI*k/2, k=0 ели x>0 & y>0; 1 if x<0 & y>0; 2 if x<0 & y<0; 3 if x>0 & y<0, движение по часовой (кажется). А лучше наоборот - полярные переводить в декартовы.

Старый 11.12.2011, 04:13
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 3  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Можно поставить чекпоинты на повороты. Определять позицию можно (только что придумал) так:
Машинка проехала допустим второй чекпоинт, теперь можно определить дистанцию машинки до 2 чекпоинта и дистанцию машинки до 3-его чекпоинта. Потом сложить эти дистанции и определить процент прохождения между чекпоинтами.
Код AS3:
d1 = Point.distance(carPoint, curCheckPoint);
d2 = Point.distance(carPoint, nextCheckPoint);
checkProcent = d1/(d1+d2);
tatalProcent = curCheckPointIndex+checkProcent; //тут будет примерно 2.3 (число типа Number)
Если между чекпоинтами дорога будет в виде дуги, ничего страшного, это мало повлияет на результат.
__________________
Гоночка

Старый 11.12.2011, 04:36
bookin вне форума Посмотреть профиль Отправить личное сообщение для bookin Найти все сообщения от bookin
  № 4  
Ответить с цитированием
bookin

Регистрация: Mar 2011
Сообщений: 53
Silicium, что то я не совсем понял о чем вы, не могли бы вы поподробнее

Alex Lexcuk, тогда придется слишком ного ставить чекпоинтов, по другому
Цитата:
превратить трассу в зебру и при каждом пересечении линии проверять в каком порядке участники пересекли линию

Старый 11.12.2011, 08:08
MXPain вне форума Посмотреть профиль Отправить личное сообщение для MXPain Найти все сообщения от MXPain
  № 5  
Ответить с цитированием
MXPain
 
Аватар для MXPain

Регистрация: Dec 2008
Сообщений: 305
Записей в блоге: 1
bookin я вам писал в теме которую закрыли, можно разметить трассу линиями невидимыми, пересекающими перпендикулярно дорогу и просто хиттестить их машинкой, только надо проверить чтобы все линии были пройдены иначе срезана трассы.


Последний раз редактировалось MXPain; 11.12.2011 в 08:17.
Старый 11.12.2011, 12:28
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 6  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Ну вот http://ru.wikipedia.org/wiki/%D0%9F%...BD%D0%B0%D1%82
А чек-поинты и линии - ...

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

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
Цитата:
Сообщение от bookin Посмотреть сообщение
ув. artcraft предложил использовать линии безье, хотел бы спросить, правильно ли я понял, мне нужно с помощью линии безье повторить трассу, а затем проверять по координатам "машины" участника в гонке, где именно находится на этой линии он, что бы узнать расстаяние от начала линии до данных координат?
да именно
трассу любой формы (точнее разделительную полосу) можно представить как набор отрезков кривой безье
а машины как точки на плоскости,
для вычисления проделанного машиной пути, нужно
1) опустить перпендикуляр на ближайший отрезок крривой и узнать координату проекции машины на кривую
2) высчитать расстояние от начала кривой до проекции машины

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

Старый 12.12.2011, 01:39
bookin вне форума Посмотреть профиль Отправить личное сообщение для bookin Найти все сообщения от bookin
  № 8  
Ответить с цитированием
bookin

Регистрация: Mar 2011
Сообщений: 53
MXPain, к сожалению не хотелось бы использовать снова проверку на столкновения у меня довольно много огромных bitmapdata с которыми довольно много идет проверок на столкновения, хотелось бы что то менее нагруженное и эффективное

Silicium, к сожалению мой маленький мозг никак не может совладать с информацией и правильно ее переварить, возможно вы можете привести пример, был бы благодарен

artcraft, я примерно так себе и представил, насколько я понял в той библиотеке на которую вы дали ссылку имеется функция которая определяет ближайшую точку от объекта до линии безье, возможно она подойдет вместо перпендикуляра, не радует правда что сайт bezbe.ru не работает =(

да и хотел бы подчеркнуть что трасса не ровный круг, кольцо, как я не точно выразился надо было добавить "к примеру", имеет искривления

Добавлено через 1 час 27 минут
Silicium, попытался сделать то что вы предлагаете но видемо из-за того что я несовсем понимаю что должно в итоге получится либо из-за того что где то что то не досматриваю но результативность мала при движении про100 два в массиве меняются местами постоянно

Код AS3:
function whereCarInTrace():void{
	var masterTaskList:Array = new Array();
	//masterTaskList.splice(0);
 
 
	var myUserCar:Number=pointObjectInTrace(car.x,car.y);
	masterTaskList[myUserCar]=[game.session.myUser.id,"muCar"];
 
	var j=0;
	for(var i in cars){
		if(i!='user'&&cars[i]){
			var carFrends:Number=pointObjectInTrace(cars[i].x,cars[i].y)
			masterTaskList[carFrends]=[i,"CarFrend"+j];
		}
		j++;
	}
	masterTaskList.sort();
 
	for(var k in masterTaskList){
		trace(masterTaskList[k][1]);
	}
	trace('------');
}
 
function pointObjectInTrace(x,y):Number{
	var k=(x>0&&y>0?0:
		   (x<0&&y>0?1:
			(x<0&&y<0?2:
			 (x>0&&y<0?3:0))));
	var pointCar:Number;
	pointCar=Math.atan(y/x)+Math.PI*k/2;
	return pointCar
}

Старый 12.12.2011, 11:37
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 9  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Цитата:
в итоге получится либо из-за того что где то что то не досматриваю но результативность мала при движении про100 два в массиве меняются местами постоянно
Ниче из этого не понял) Но судя по всему меняются местами машинки при переходе из квадранта в квадрант. Это связанно с тем, я думаю, что я привел формулы для правой системы координат, а у вас она левая, само-собой (ось ОУ вниз направленна). в каком направлении движутся машинки?
Да, и вот еще что: мой алгоритм действителен только на одном круге трассы! А вот для того, чтобы круги считать, надо на старте чекпоинт поставить, чтобы он круги отсчитывал. Тогда к значению угла надо еще 2PI*nприбавлять.
ИЛИ! делать наоборот: от полярных переходить к декартовым. Это не сложно, но будет больше вычислений, т-к вектор ускорения тоже надо будет перевести в полярные коры.
Еще вопрос: ширина трассы имеет значение?

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

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
Цитата:
Сообщение от bookin Посмотреть сообщение
в той библиотеке на которую вы дали ссылку имеется функция которая определяет ближайшую точку от объекта до линии безье, возможно она подойдет вместо перпендикуляра
да

Цитата:
не радует правда что сайт bezbe.ru не работает =(
ну не работает и что, сама библиотека с примерами и документацией доступна
__________________
Хороший отдых - половина работы.

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

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

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


 


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


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