Вверх ↑
Ответов: 246
Рейтинг: 13
#1: 2010-07-17 15:41:11 ЛС | профиль | цитата
г. Zmеy писал(а):
И ещё. не в обиду, но Solar SysTech как-то не очень.
(Чисто мои мысли, хотите - принемайте, не хотите- не принимайте)
Критика здесь уместна и это собственно хорошо.[flood]
г. Zmеy писал(а):
Кстати если чё я к вам
Зарегистрируйся в конце то концов.
г. Zmеy писал(а):
Hardcore-15%
Ухты, у меня контрольный пакет [/flood]

Вот выкладываю реализацию астрономически правильного алгоритма движения планеты
Add(PaintBox,2372949,252,105)
{
Width=635
Height=447
Align=5
Point(Width)
Point(Height)
Point(Handle)
}
Add(MainForm,2953706,63,112)
{
Width=643
Height=481
Point(onResize)
link(onCreate,10947338:doEvent1,[(111,132)(111,209)])
link(onResize,9517210:doEvent1,[(111,139)(111,167)])
}
Add(Math,1104520,378,322)
{
OpType=3
Op2=360
link(onResult,27129:doOperation,[])
}
Add(Math,1699798,329,322)
{
OpType=2
Op2=6.28
link(onResult,1104520:doOperation,[])
link(Op1,11649503:Var1,[(335,299)])
}
Add(GL_Main,1573257,196,203)
{
Color=0
link(onInit,4487472:doInit,[])
link(onViewPort,12233474:doPerspective,[(244,216)(244,244)])
link(Handle,2372949:Handle,[(202,148)(279,148)])
}
Add(Math,11035262,259,161)
{
OpType=3
link(Op1,2372949:Width,[])
link(Op2,2372949:Height,[])
}
Add(Hub,10947338,126,203)
{
link(onEvent1,1573257:doInit,[])
link(onEvent2,7199376:doWork2,[])
}
Add(Hub,9517210,126,161)
{
link(onEvent1,11035262:doOperation,[])
link(onEvent2,7199376:doWork1,[(165,174)])
}
Add(HubEx,7199376,161,210)
{
link(onEvent,1573257:doViewPort,[])
}
Add(Timer,5786386,105,308)
{
Interval=20
link(onTimer,634658:doEvent1,[])
}
Add(Hub,634658,154,308)
{
OutCount=5
link(onEvent1,15697590:doClear,[])
link(onEvent2,15697590:doPushMatrix,[])
link(onEvent3,15604069:doPushMatrix,[])
link(onEvent4,15697590:doPopMatrix,[(182,335)(182,328)])
link(onEvent5,1573257:doFlip,[(182,342)(182,223)])
}
Add(GL_Perspective,12233474,259,238)
{
link(Aspect,11035262:Result,[])
}
Add(GL_Light,14289992,525,203)
{
link(Point,8948124:Point3D,[])
}
Add(GL_Options,11849752,378,203)
{
link(onEvent,16762480:doSet,[])
}
Add(GL_Material,16762480,427,203)
{
link(onSet,1325132:doEnabled,[])
}
Add(GL_Options,1325132,476,203)
{
Flag=2
link(onEvent,14289992:doEnabled,[])
}
Add(GL_Point3D,8948124,525,147)
{
}
Add(GL_GluTools,4487472,329,203)
{
link(onInit,11849752:doEnabled,[])
}
Add(GL_Sphere,8354190,770,322)
{
Radius=0.08
Slices=25
Stacks=25
link(onDraw,2596187:doPopMatrix,[])
link(Radius,114248:Value,[])
}
Add(Gl_Translate,6506827,672,322)
{
link(onTranslate,7018867:doColor,[])
link(Z,11649503:Var2,[])
}
Add(GL_Rotate,15834536,623,322)
{
Y=1
link(onRotate,6506827:doTranslate,[])
}
Add(GL_Color,7018867,721,322)
{
Color=12632256
link(onColor,8354190:doDraw,[])
}
Add(GL_GTools,15604069,280,322)
{
Point(doPushMatrix)
link(onEvent,1699798:doOperation,[])
}
Add(GL_GTools,2596187,819,322)
{
Point(doPopMatrix)
}
Add(Memory,114248,770,273)
{
Default=String(0.08)
}
Add(GL_GTools,15697590,196,308)
{
Point(doClear)
Point(doPushMatrix)
Point(doPopMatrix)
}
Add(Counter,4584492,574,322)
{
Max=360
Point(doStep)
Point(Step)
link(onNext,15834536:doRotate,[])
link(Step,13328461:Result,[(580,310)(531,310)(531,366)(482,366)])
}
Add(GetDataEx,11649503,686,294)
{
link(Data,16104:Text,[])
}
Add(Edit,16104,686,259)
{
Left=10
Top=10
Text="1"
}
Add(Edit,7661880,574,371)
{
Left=60
Top=10
Text="1"
}
Add(Hub,16375602,525,322)
{
OutCount=3
link(onEvent1,4584492:doStep,[(560,328)(560,349)])
link(onEvent2,7661880:doText,[(560,335)(560,377)])
link(onEvent3,4584492:doNext,[(560,342)(560,328)])
}
Add(Math,27129,427,322)
{
OpType=3
Op2=0.01744
link(onResult,13328461:doOperation,[])
}
Add(Math,13328461,476,322)
{
OpType=3
link(onResult,16375602:doEvent1,[])
link(Op1,15811127:Value,[])
link(Op2,27129:Result,[(489,310)(468,310)(468,366)(433,366)])
}
Add(Memory,15811127,476,259)
{
Default=Integer(1)
}


Если кому интересно вот как я рассчитал движение.
Из формулы длинны окружности, в нашем случае это орбита,
ℓ=2пR
получаем длину орбиты, которую потом же делим на 360°, в итоге получаем зависимость пройденного расстояния от градуса на который повернули планету относительно оси(в моем варианте это ось Y)
Высчитываем коэффициент нормального движения планеты, то есть зависимость пройденного расстояния от градуса на который повернули планету, за нормально движение можно принять совершенно любую планету, я взял скорость планеты радиус орбиты которой 1 за нормальную и получил:
[i]ℓ=2*3.14*1
ℓ=6.28

Отношение пройденного расстояния от градуса на который была повернута планета=6.28/360
Итого 0.017(4)[/i]
Теперь определим во сколько раз быстрее движется планета относительно нормальной:
V/0.01744=кол-во раз.
теперь определим на сколько градусов должна перемещаться планета за интерацию, что-бы соблюдать скорось:
1/кол-во раз.
карма: 0

0