Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Анимация


Автор: annaj 15.5.2006, 16:15
Задание такое: смоделировать в VB вращение Земли вокруг Солнца по элипсоидной орбите.
Кто скажет, как это сделать (как min - хотя бы общая структура программы, через что это делать *циклы и пр.*, ну и как max - каким образом и с помощью каких кодов эту программу вообще писать.
ОЧЕНЬ надеюсь на помощь.  

Автор: cardinal 15.5.2006, 16:24
Требуют 2D или 3D графику в модели? 

Автор: annaj 15.5.2006, 16:54
2d, желателен вариант с ускоренным движением 

Автор: profispb 16.5.2006, 15:01
annaj, А если картинку поставить(т.е. несколько картинок) и заменять через интервал времени, или нужно с помощью сложных математических расчетов.  

Автор: Akina 16.5.2006, 15:08
Структура:

1) Задать исходное состояние
2) Нарисовать
3) Рассчитать конечное состояние через заданный квант времени (численное интегрирование ур. Кеплера)
4) Перерисовать
5) Фигачить п.п. 3 и 4 пока юзер кнопку не нажмет.
6) End

Ускорение-замедление - просто изменение кванта времени.
 

Автор: annaj 16.5.2006, 15:16
profispb Картинки надо нарисовать, но это не проблема, вопрос в расчетах: как сделать так, что бы при приближени ик солнцу земля двигалась быстрее, а при удалении - медленнее

Akina  а вот можно поподробнее про квант времени и Кеплера - что это такое и как его зафигачить в код? ;)

 

Автор: profispb 16.5.2006, 18:38
annaj, 
Цитата

profispb Картинки надо нарисовать, но это не проблема, вопрос в расчетах: как сделать так, что бы при приближени ик солнцу земля двигалась быстрее, а при удалении - медленнее

Сделать это можно расчитав интервал времени: приблежается к сонцу картинка обновляется быстрее, отдоляется от солнца картинка обновляется медленно. 

Автор: annaj 16.5.2006, 18:42
Хорошая идея.
Только вот как это сделать? smile 

Автор: cardinal 16.5.2006, 21:34
Цитата(annaj @  16.5.2006,  14:16 Найти цитируемый пост)
как сделать так, что бы при приближени ик солнцу земля двигалась быстрее, а при удалении - медленнее

Самый простой пример
Код

Option Explicit
Private Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const PI = 3.14159265

Private Sub Command1_Click()
Dim i As Integer
Dim x As Integer
Dim y As Integer
y = Form1.Height / Screen.TwipsPerPixelY / 2
For i = 0 To 100
    DoEvents
    x = Form1.Width / Screen.TwipsPerPixelX / 2 + 100 * Sin(PI / 50 * i)
    Form1.Cls
    Ellipse Me.hdc, _
            x - 10, _
            y - 10, _
            x + 10, _
            y + 10
    Sleep 100
Next
End Sub
 

Автор: Akina 17.5.2006, 11:18
Цитата(annaj @  16.5.2006,  16:16 Найти цитируемый пост)
можно поподробнее про квант времени 

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

Например ты намерен рисовать со скоростью 720 часов (1 месяц) в минуту (60 секунд). Быстродействие системы тебе позволяет с запасом просчитывать 40 последовательных состояний в секунду. Квант времени получается 720 / (60 * 40) = 0.3 часа = 18 минут. Именно с таким шагом тебе и надо интегрировать уравнение Кеплера, которое описывает движение тела в гравитационном поле удаленной точки (планеты вокруг Солнца без учета влияния других планет и вращения самого Солнца вокруг общего центра масс солнечной системы), и которое ты найдешь в школьном курсе астрономии. Численное интегрирование выполняется любым стандартным методом, обеспечивающим необходимую точность.

 

Автор: annaj 20.5.2006, 20:15
cardinal, хм, не работает( Бейсик многие знаки подчеркивает и пишет ошибки... 

Автор: cardinal 21.5.2006, 01:19
annaj, выкладывай проект... 

Автор: annaj 21.5.2006, 08:05
какой? я говорила о написанной выше программе... 

Автор: cardinal 21.5.2006, 13:28
Ты кнопку с названием Command1 (default имя кнопки при ее создании) на форму кинула? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)