Render.ru

анимация с помощью контроллеров

aly8

Активный участник
Рейтинг
10
#1
всем привет.
Уважаемые спецы. Кто хорошо разбирается в контроллерах, подскажите пожалуйста, возможно ли такое реализовать с их помощью?
осторожно - думает сек 15
Код:
(
	try(delete objects)catch()
	units.SystemType = #meters 
	--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	local startFrame = 0, 
			endFrame = 10000, 
			byFrame = 1, 
			dt = 1.0d0/250.0d0, 
			theObjCount = 10
	--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	local V = [0.0d0,0.0d0,0.0d0]
	local  ArrObjects = #(), ArrVelosity = #(), ArrMass = #(), ArrPos = #(), SumArrPoss = #(), ArrRadius = #(), counter = 1
	local theG = 6.67428d-011    
	local Mz = 5.9736d+012
	
for i = 1 to theObjCount do
(
	local p = 20.0, a = 1.0
	local SpOne = sphere pos:(random [p,p,p] [-p, -p, -p]) radius:(random 1 1) 
	V = random [a,a,a] [-a, -a, -a]
	append ArrObjects SpOne
	append ArrVelosity V
	append ArrMass (Mz*SpOne.radius)
	append ArrPos SpOne.pos
	append ArrRadius SpOne.radius
	)	
	
for k = startFrame to endFrame by byFrame do 
(
			append SumArrPoss (deepCopy ArrPos)
			for i = 1 to theObjCount do
			(
				local SumForceVector = [0.0d0, 0.0d0, 0.0d0]
				local M1 = ArrMass[i]
				for j = 1 to theObjCount do
				(
					local M2 = ArrMass[j]
					if i != j do
					(
						local d1 = (length(ArrPos[j] - ArrPos[i]))^2
						local d2 = (length(ArrPos[j] - ArrPos[i]))^4
						local F1 = (theG*M2*M1/d1)*(normalize (ArrPos[j] - ArrPos[i]))
						local F2 = -140.0*(theG*M2*M1/d2)*(normalize (ArrPos[j] - ArrPos[i]))
						SumForceVector += (F1 + F2)
						)
					)
					
				for j = 1 to theObjCount do
				(
				local M2 = ArrMass[j]
				local dV12 = length (ArrPos[j] - ArrPos[i])
				local dRad = ArrRadius[i] + ArrRadius[j]
					if i != j do
					(
						if dV12 <= dRad do 
							(
								local n = normalize (ArrPos[j] - ArrPos[i])
								local t = normalize (cross  (cross n ArrVelosity[i]) n) 
								local V1n = (normalize n)*(dot n ArrVelosity[i])
								local V1t = (normalize t)*(dot t ArrVelosity[i])
								V1n = V1n*(M1 - M2)/(M1+M2)
								ArrVelosity[i] = V1n + V1t
								) 
						)
					)
					
					ArrPos[i] += ArrVelosity[i]*dt
					local dV = (normalize SumForceVector)*((length SumForceVector)*dt/M1)  
					ArrVelosity[i] += dV
				)-- end i
			)--end k
			
animate on
for t = startFrame to endFrame by byFrame do
(
	at time t
		(
			local numO = ArrObjects.count
			for i = 1 to  numO do
			(
				ArrObjects[i].pos = SumArrPoss[counter][i]
				)
				counter += 1
				)--end t
			)
animationRange = interval  startFrame  endFrame
)
Будет ли стоить овчинка выделки? (в плане скорости расчетов и др.)

И еще. Возможно ли создать с помощью контроллеров взаимодействие в реальном времени(не timer)? К примеру, что бы можно было бросать шарик мышкой...?
 
Сверху