Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

А не устраивать ли нам небольшие конкурсы по кодингу?   Найти похожие ветки 

 
NailMan ©   (2004-07-20 15:23) [600]

КиТаЯц ©
Да хоть так, только движение по инерции и правильная математика столкновений типа Сфера-Сфера не такие уж простые как кажутся в условия этой самой инерции.

К тому же если я и возьмусь за такой конкурсный проект, то делать буду только в half-3D(как у WildTangent-овской вариации) и под современное железо(поинтспрайты и т.д.) так что дохлые тачки судей как-то не катят.

---
WBR, NailMan aka 2:5020/3337.13


 
ПсихЪ_задумчивый   (2004-07-20 15:52) [601]


> NailMan ©   (20.07.04 15:23) [600]

Да ладно, простейшая реализация инерционного движения занимает 2-3 строчки, а столкновение сфера-сфера упирается в нахождение расстояния между центрами. Быструю функцию нахождения этого расстояния предложил Андре Ламонт. Как для 2D, так и 3D реализации. Погрешность 3,5%, но скорость не впример высокая. Исключительно смещение битов, и никакх тебе корней.
Так что в таком задании можно будет сосредоточится исключительно на красивостях, что ни есть гуд.


 
NailMan ©   (2004-07-20 17:47) [602]

ПсихЪ_задумчивый
Простейшая инерция для играбельности не катит(я сейчас как раз занимаюсь правильной инерцией для своего UT).

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

Что же касается определения факта столкновения сфера-сфера(3D), то:

Function CheckCollisionSphereToSphere(V1:td3dvector;r1:single;V2:td3dvector;r2:single):boolean;
var sQ:Single;
begin
sQ:=Sqr(v2.x-v1.x) + Sqr(v2.y-v1.y) + Sqr(v2.z-v1.z);
If sq<=((r1+r2)*(r1+r2)) then  result:=true else  result:=false;
end;

V,r - Координаты центра и радиус соответсвенно.

Словами переводя формулу - если квадрат расстояния между точками в пространстве меньше либо равно квадрату суммы радиусов двух сфер, то типа столкнулись! Точность 100% с 50% вероятностью(true/false)...   :-))

Формула кажется Пифагора...

ЗЫ: Сорри за оффтопиковый код...по идее это секреты  ;-))

---
WBR, NailMan aka 2:5020/3337.13


 
NailMan ©   (2004-07-20 17:51) [603]

Красивости само собой - без этого никуда, только вот думаю 2Д реализация будет менее привлекательна в силу ограничения по размер итогового дистрибутива(анимация взрывов будет затруднительна).
Но это это добавит интригу - 2Д против half-3D(не путать с 2D-over-3D).

---
WBR, NailMan aka 2:5020/3337.13


 
ПсихЪ_задумчивый   (2004-07-20 18:04) [604]


> NailMan ©   (20.07.04 17:51) [603]

В конкурсах нет ограничений на раелизацию. За 3D плюсов не поставят. А приведённая тобой функция тормозная, как старая черепаха. Двемерная реализация этой функции есть у меня в исходники для второго конкурса.


 
NailMan ©   (2004-07-20 18:12) [605]

ПсихЪ_задумчивый
Чем тормозная? Ни одного корня, умножения и сложения/вычитания, двумерная реализация еще проще, откинув Z и вместо Single юзать Integer. Вообще получится быстрее поноса(понос на заметку быстрее мысли, а мысль мгновенна)  :-))


> За 3D плюсов не поставят

Даже и не надеюсь - просто мне так проще.

---
WBR, NailMan aka 2:5020/3337.13


 
Zer0 ©   (2004-07-20 18:19) [606]

ГыГыГы

в моей деме одновременно отбражались и сталкивались со с всеми физическими законами 120 обьектов в реальном времени. 30 фпс на p2-300.


 
Zer0 ©   (2004-07-20 18:28) [607]

p.s. никаких оптимизаций, кроме прямого использования fpu =)


 
RagE ©   (2004-07-20 19:01) [608]

даешь конкурс :). а то сяду старые делать :)


 
ПсихЪ_задумчивый   (2004-07-21 09:23) [609]


> sQ:=Sqr(v2.x-v1.x) + Sqr(v2.y-v1.y) + Sqr(v2.z-v1.z);

Тут по твоему нет корней?


 
RagE ©   (2004-07-21 10:21) [610]

ПсихЪ_задумчивый   (21.07.04 09:23) [609]
Как бы ты не отказывался верить а нет :). корень sqrt а sqr это x*x.


 
NailMan ©   (2004-07-21 10:55) [611]

ПсихЪ_задумчивый
> > sQ:=Sqr(v2.x-v1.x) + Sqr(v2.y-v1.y) + Sqr(v2.z-v1.z);
>
> Тут по твоему нет корней?

Как и сказал RagE - нету тут корней, хорошло могу написать так:

sQ:=(v2.x-v1.x)*(v2.x-v1.x) + (v2.y-v1.y)*(v2.y-v1.y) + (v2.z-v1.z)*(v2.z-v1.z);

те же яйца только в профиль...так даже быстрей получится - нет лишних вызовов функции


 
ПсихЪ_задумчивый   (2004-07-21 11:24) [612]

Э... ГЫ! Туплю, в общем... (:
Но всё равно вот это:

function Fast_Distance_2D( x : int; y : int ) : int;
var
 mn : int;
begin
 x := abs( x );
 y := abs( y );

 if x < y then
   mn := x
 else
   mn := y;

 Result := ( x+y-( mn shr 1 )-( mn shr 2 )+( mn shr 4 ) );
end;

быстре будет. Вызывается как:

Fast_Distance_2D( x1-x2, y1-y2 );


 
wiz (at work)   (2004-07-21 13:29) [613]

2 ПсихЪ_задумчивый:

если мы "чиста канкретна" бьёмся за скорость :), тогда это
---cut---
x := abs( x );
y := abs( y );
---cut---

надо заменить на:

---cut---
if x<0 then x:=-x;
if y<0 then y:=-y;
---cut---
так мы избавились от двух вызовов функции abs

:)))


 
cyborg ©   (2004-07-21 13:41) [614]


> [613] wiz (at work)   (21.07.04 13:29)

Ещё быстрее будет:

X:=X and 7FFFFFFF;
Y:=Y and 7FFFFFFF;


 
NailMan ©   (2004-07-21 14:52) [615]

cyborg ©
При условии что это Integer...

---
WBR, NailMan aka 2:5020/3337.13


 
cyborg ©   (2004-07-21 15:04) [616]


> [615] NailMan ©   (21.07.04 14:52)

оно там интегер ;)


 
NailMan ©   (2004-07-21 15:46) [617]

cyborg ©
А ну да. Ступил.

Все таки интересен вариант с Single. Буду наверно прав если юзать вместо Single - Extended - это все таки родной для FPU формат числа, а не Single -> меньше конвертаций Single->Extended->Single

---
WBR, NailMan aka 2:5020/3337.13


 
cyborg ©   (2004-07-21 15:51) [618]


> [617] NailMan ©   (21.07.04 15:46)

А я думал, что сингл сопроцессор тоже жуёт, как процессор жуёт байты и слова, разве не так? Не знал.


 
RagE ©   (2004-07-21 16:08) [619]

Вот чувствую опять настанут выходные прийду на рабочее место а конкурс уже идет вовсю, вместо того чтобы в свободное время занятся разработкой :) Выберем задание конкурса таки или нет?


 
Darthman ©   (2004-07-21 16:13) [620]

Давайте решать, в самом деле :D
Последнее слово беру за собой, как устроитель ;) но темы от вас оч. хочу услышать самые желаемые. Пусть каждый напишет по 2-3 темы, которые бы он стал делать, которые кажутся интересными точнее. Вот.


 
cyborg ©   (2004-07-21 16:23) [621]

Интересно было бы сделать диалог из РПГшных игр, то-сё, туда-сюда, дай то, дай сё. Можно только в консоли делать, никто не останется в обиде ;). Только срока на такой конкурс нужно минимум месяц давать.


 
NailMan ©   (2004-07-21 16:55) [622]

cyborg ©  
> А я думал, что сингл сопроцессор тоже жуёт, как процессор
> жуёт байты и слова, разве не так? Не знал.

Сингл это упрощенный формат. Сопроцессор имеет внутренний формат числа Extended, и когда дельфи сует ему сингл, то автоматом оно конвертится в extended и при выходе наоборот. При этом теряется точность(к вопросу о сравнениях чисел с плавающей точкой). так чта...

Другой вопрос что в API(D3D,OGL) юзают сингл как основной формат - для экономии места и из-за того что Single весит 32бит, что для сопроцессора ЦПУ и сопроцессора видеоадаптера более удобно чем Extended(кажется 80бит весом).

Darthman ©
Могу лишь голосовать за Asteroids. И то под сомнением мое участие - работы у меня сейчас много.

---
WBR, NailMan aka 2:5020/3337.13


 
ПсихЪ_задумчивый   (2004-07-21 17:25) [623]


> Darthman ©   (21.07.04 16:13) [620]

Я уже писал, то, что по моему сможет адекватно соответствовать самой идее конкурсов. А посему подписываюсь ещё и к предложению cyborg"а. Имя под этим в виду, что гораздо продуктивней будет заданием конкурса считать реализацию какой-то одной части игры (меню, диалоги, консоль и т.д.).


 
Darthman ©   (2004-07-21 18:55) [624]

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


 
DeadMeat ©   (2004-07-21 19:05) [625]

А мне ещё Earth Scorch нравится... У меня 3D вариант есть, правда вот найти не могу... Там всё также играется как и в 2D, только добавилось дополнительное управление по сторонам горизонта... Целится также как и раньше, но сначала непривычно, а потом в самый раз...
Я за Earth Scorch... А так, можно ещё о чем-нибудь подумать на досуге...

---
...Death Is Only The Begining...


 
Darthman ©   (2004-07-21 19:15) [626]

Надеюсь вы не обидитесь, что это не Scorched Earth =) Идея имхо интересная. Спасибо тому, кто подсказал.
Условия:
http://code.rpro.ru/_xonix.html


 
DeadMeat ©   (2004-07-21 19:36) [627]

Ну чтож... Будем делать Xonix... Сразу говорю, можете меня заранее оштрафовать по размеру... Если опять таки успею вовремя. Хотя в этот раз расчитываю успеть.


 
OSokin   (2004-07-21 20:47) [628]

OK. Сделаем. У меня есть типа такой, но без исходников. Буду делать по ее образу и подобию, но упрощенно.


 
Zak3D[@Tm] ©   (2004-07-21 22:28) [629]

: ) А я посмотрю как вы отризание делать будете ( Моя тема как раз о нём :)))))


 
Darthman ©   (2004-07-22 00:47) [630]

А это как раз самое интересное ;)


 
ПсихЪ_задумчивый   (2004-07-22 10:12) [631]


> Zak3D[@Tm] ©   (21.07.04 22:28) [629]


> Darthman ©   (22.07.04 00:47) [630]

Это я уже описывал в "заковской" теме...
Да, если не заморачиваться со всякими там дазигнами, то действительно интересно будет реализовывать сею игру. ТОлько вот у меня комп почти здох, поэтому буду делать на рабочем компе после работы. Я участвую точно!!!


 
Darthman ©   (2004-07-22 10:24) [632]

Я, почти 100% тоже в этот раз приму участие.


 
MegaVolt   (2004-07-22 10:45) [633]

Вот образец вдобавок не просто с шариками а с наворотами http://webfile.ru/32423


 
ПсихЪ_задумчивый   (2004-07-22 11:25) [634]


> MegaVolt   (22.07.04 10:45) [633]

Дома у меня Хonix3D стоит. Правда очень древняя не крятнутая шаровара. Графика убогая, доступен толь Лёгкий режим игры, но наворотов там полно. Бонусы всякие, когда вражий шар врезается в твою линию, то от места удара начиает расползаться волна и пока она не достигла тебя ты ещё можешь завершить отрезание... Ну и прочие радости.


 
RagE ©   (2004-07-22 12:57) [635]

Мне задание нравится, я с вами


 
Darthman ©   (2004-07-22 14:05) [636]

Ну вообщем-то оно не тривиальное, тут задачки и косяки будут.


 
Darthman ©   (2004-07-23 10:27) [637]

up


 
wiz ©   (2004-07-23 17:53) [638]

немного не в тему, но...

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

ПсихЪ ver - 586 нс/выч
wiz ver - 546 нс/выч
cyborg ver - 526 нс/выч
nailman non-sqrt ver - 415 нс/выч
nailman sqrt ver - 802 нс/выч

машина - Intel Pentium-4 2.2Ghz / ram512Mb
(причём P4-Mobile если я правильно понимаю, т.к. ноутбук)

хотел послать результаты с работы, но все уже уходили, так что послал exe"шник домой и сделал то же самое дома:

ПсихЪ ver - 464 нс/выч
wiz ver - 487 нс/выч
cyborg ver - 434 нс/выч
nailman non-sqrt ver - 312 нс/выч
nailman sqrt ver - 1075 нс/выч

машина - P3-1200 / ram256Mb

сравнивая результаты... ВОПРОС!!!!!! почему P4 почти везде пасётся? почему нет ожидаемого улучшения на P3 (ПсихЪ->wiz->cyborg)? кто-нибудь занимался подобными вещами???

PS: если кому интересно - могу завтренько с утреца выложить бинарники/исходники


 
wiz ©   (2004-07-23 17:55) [639]

PPS: кстати, и там и там win2k-sp4 (если вдруг возникла мысль, что ОС может влиять на результат)


 
wiz ©   (2004-07-23 18:12) [640]

PPPS: для тех кто не хочет ждать до завтра пример:

//ПсихЪ code
function Fast_Distance_2D( x : integer; y : integer ) : integer;
var
mn : integer;
begin
x := abs( x );
y := abs( y );

if x < y then
  mn := x
else
  mn := y;

Result := ( x+y-( mn shr 1 )-( mn shr 2 )+( mn shr 4 ) );
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
 x,y,len:integer;
 worktime,dummy:double;
begin
dummy:=0;

TimerInit;
for i:=1 to max_iter do
 begin
 x:=random(10000)-5000;
 y:=random(10000)-5000;

 len:=Fast_Distance_2D(x,y);
 dummy:=dummy+len;
 end;
TimerTick;

edit1.text:=floattostr(dummy);
worktime:=timer_counter/max_iter * 10E9;
edit1.text:=format("%4.4f нс/выч",[worktime]);
end;

TimerInit, TimerTick - вызовы QueryPerformanceCounter;
dummy - чтобы компилер не "забил" на len;
edit1.text:=floattostr(dummy); - чтобы компилер не "забил" на dummy;
max_iter - очевидно количество итерации (1 000 000)



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 16 17 18 
19 20 21 22 23 24 25 26 27 
вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 1.6 MB
Время: 0.473 c
1-1102503744
Sirus
2004-12-08 14:02
2004.12.26
Нужно опознать путь типа c: folder folder1


1-1103047048
mixamixa
2004-12-14 20:57
2004.12.26
Пузырьковая сортировка.


9-1093486007
Xerx
2004-08-26 06:06
2004.12.26
Формат моделей


14-1102492845
Суслик
2004-12-08 11:00
2004.12.26
Delphi 2005 и никаких клиент-серверов


1-1103038441
maxz
2004-12-14 18:34
2004.12.26
Утечка памяти