Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование в широком смысле слова > Физика

Ответ
 
Опции темы
Старый 30.11.2010, 12:41   #1
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,571
Написано 407 полезных сообщений
(для 863 пользователей)
Волны

Заинтересовался тут над темкой - создать небольшой симулятор..... Волны!
Той самой волны, которая образуется в реке при попадании в нее камня, или другого предмета

Моя теория (неудачная):
имеем кучу точек в 2Д пространстве, с четким промежутком, этак пикселей 20.
Каждая точка находит среднюю арифметическую У-координату двух соседних точек, и прибавляет к своему вектору ускорения по Y это самое число, умноженное на некий коэффициент (допустим, .01)
получается вполне рабочяя хрень, но! сделав ровную водную поверхность, я "бросил" в нее камушек. Получилось так, что в месте падения продолжительное время колебались волны, и далее круг волны не распространялся. Может кто знает какой-нибудь другой алгоритм???
__________________
(Offline)
 
Ответить с цитированием
Старый 30.11.2010, 13:21   #2
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 05.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,641 пользователей)
Ответ: Волны

Затухающая синусоида, не?
__________________

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
BlackDragon (30.11.2010), Reizel (02.12.2010)
Старый 30.11.2010, 18:18   #3
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Волны

Формула Лапласа
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (02.12.2010)
Старый 02.12.2010, 23:08   #4
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,571
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Волны

Почитал про формулу Лапласа...
Может быть это и подходит для решения задачи, но эти дьявольские интегралы (ко всему еще и определенные) у меня отбивают всякое желание делать сие.
К тому же я не дружу особо с вышкой, поэтому не могу понять как она применяется. Чтож, буду бить в бубен
__________________
(Offline)
 
Ответить с цитированием
Старый 03.12.2010, 01:55   #5
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Волны

ProcedureDLL UpdateWater_tm()
ForEach Water()
Lis.l=ListIndex(water())
If PeekL(water()\surf+36)<>0
;=================
If water()\ss
hdd.f=0.06
dimple(ListIndex(water()),Random(water()\width),Ra ndom(water()\depth),hdd.f)
EndIf
;--------------------------
For xm= 1 To water()\width+1
For zm=1 To water()\depth +5

If zm<water()\depth-1 And xm<water()\width-1

yv.f=nU(Lis,xm,zm)*water()\h

PokeF (memM(Lis,xm,zm)+4,yv.f)
heiM (Lis,xm,zm)=yv.f

laplas.f=(nU(Lis,xm-1,zm)+nU(Lis,xm+1,zm)+nU(Lis,xm,zm+1)+nU(Lis,xm,zm-1))*0.25-nU(Lis,xm,zm)
pU(Lis,xm,zm)=((2.0-water()\sd)*nU(Lis,xm,zm)-pU(Lis,xm,zm)*(1.0-water()\sd)+laplas)

EndIf
;================================================= =
If zm>4
zmn=zm-5
xmn=xm-1
;-----------------normal-------


e1.f And e0.f=heiM (Lis,xmn,zmn)
If xmn<water()\width
e0.f=heiM (Lis,xmn+1,zmn)
EndIf

If xmn>0
e1.f=heiM (Lis,xmn-1,zmn)
EndIf

xn.f=-(e0.f-e1.f)

e1.f And e0.f=heiM (Lis,xmn,zmn)
If zmn<water()\depth
e0.f=heiM (Lis,xmn,zmn+1)
EndIf

If zmn>0
e1.f=heiM (Lis,xmn,zmn-1)
EndIf

zn.f=e0.f-e1.f
yn.f=4

;--------------------normalisate--------
;-------------------------
PokeF (memM(Lis,xmn,zmn)+12,xn.f)
PokeF (memM(Lis,xmn,zmn)+16,yn.f)
PokeF (memM(Lis,xmn,zmn)+20,zn.f)
EndIf

Next
Next

;================================

;EndIf

*Sw=AllocateMemory(65535)
RtlMoveMemory_(*Sw,@pU(Lis,0,0),65535)
RtlMoveMemory_(@pU(Lis,0,0),@nU(Lis,0,0),65535)
RtlMoveMemory_(@nU(Lis,0,0),*Sw,65535)
FreeMemory(*Sw)



PokeL(water()\surf+36,0)
EndIf

Next


EndProcedure
;================================
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (03.12.2010)
Старый 18.12.2011, 16:12   #6
nil0q
ПроЭктировщик
 
Аватар для nil0q
 
Регистрация: 30.06.2009
Адрес: Челябинская обл.
Сообщений: 111
Написано 32 полезных сообщений
(для 99 пользователей)
deleted
__________________
Аинéжарбази овокáсьф имятнэ́меле как, имякщтóт и имяини́ль оклёт ими́ньдо сяюзлёп, ильсы́м эынэвьтспóс ышáн мóнян тягалзи, эы́жущт тят-ищт сант-ищтý анакаккáт; áкызэй овóваримь авотэ́ як итя́ммарг тыжýлс аирьтэмяег аянлетя́трэщтанот, мадóраи мынавóзарбо мэ́сьф мынтáняп авокáныдя, икиньхэ́ть мóкызэй астэя́львэй шóтрэщт ильсэ́й.
Щамóпф раткáдэрь оидюá!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +1, время: 09:59.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com