Подскажите формулу

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Подскажите формулу

Сообщение TiG » 14.02.2008 (Чт) 11:12

Есть начальная точка x0,y0 = 0,0
Есть курс [0.0...360.0] градусов, меняюшийся в известном интервале времени от 55 милисекунд до 500 мс.
Есть скорость [0.0...20.0] морских миль/час, меняющеяся в известном интервале времени 500 мс.

Задача расчитать точку x1, y1 как только изениться скорость или курс.

я что то неправильно делаю:

расстояние = скорость в час/60/60*1000/timer1.interval
x1 = x0 + расстояние * sin(1.74532925199433E-02*(-угол)+3.14159265358979)
y1 = x0 + расстояние * cos(1.74532925199433E-02*(угол)+3.14159265358979)

получается охинея

если вместо расстояния подставить скорость, то что-то похожее получается, но при увеличении скорости увеличивается и радиус окружности по которой плывёт корабль, если приращение угла одинаковое, например 1,6.
Все мои игрушки мама разметало ураганом...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 14.02.2008 (Чт) 12:01

наверное правильней будет не так:
расстояние = скорость в час/60/60*1000/timer1.interval
а так:
расстояние = скорость в час/60/60*timer1.interval/1000

И если окружность то наверное тебе расстояние нужно измерять не линейное а угловое. т.е. на сколько градусов изменит свое положение кораблик относительно центра. И линейное расстояние нужно преобразовывать в сектор и считать угол этого сектора?


но при увеличении скорости увеличивается и радиус окружности по которой плывёт корабль

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

Аватара (с) Тёмыч

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 14.02.2008 (Чт) 12:24

и учитывая сопротивление жидкости в которой он плавает
Вот это точно можно не учитывать :)
Зависмость линейной скорости от радиальной примерно такая: лс=рс*радиус (и где-то там пи); можно сократить время: метры=градусы*радиус, получается, что все правильно - градусы=метры/радиус.
Лучший способ понять что-то самому — объяснить это другому.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 14.02.2008 (Чт) 12:31

Igor_123 точно) при вычислении расстояния ошибся я

но всё равно охинея получается

Кораблик движеться в зависимости от изменения курса и скорости, влияние воды, инеркции и прочих факторов не учитывается, круг взят для простоты задания переменных.
Все мои игрушки мама разметало ураганом...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 14.02.2008 (Чт) 12:38

Убери из формулы х0 и у0.
x = расстояние * sin(1.74532925199433E-02*(-угол)+3.14159265358979)
y = расстояние * cos(1.74532925199433E-02*(угол)+3.14159265358979)
Если у тебя круг, тогда нужно просто вычислять составляющие х и у для определенного угла поворота, а расстояние до центра круга сотается неизменным и равно радиусу.
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 14.02.2008 (Чт) 12:50

охинея
пишется через "а". Раз уж так любишь это слово, пиши его правильно.
Лучший способ понять что-то самому — объяснить это другому.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 14.02.2008 (Чт) 12:57

Igor_123
нет не круг, любая траектория, круг просто для проверки

расстояние = очень маленькое значение, можно сказать 0, естественно графически ничего не меняется
Код: Выделить всё
Private Sub Text1_Change()
Line1.X1 = Line1.X1 + (Text2.Text / 60 / 60 * Timer1.Interval / 1000) * Sin(1.74532925199433E-02 * (-Text1.Text) + 3.14159265358979)
Line1.Y1 = Line1.Y1 + (Text2.Text / 60 / 60 * Timer1.Interval / 1000) * Cos(1.74532925199433E-02 * (Text1.Text) + 3.14159265358979)
Line1.X2 = Line1.X1
Line1.Y2 = Line1.Y1
End Sub

Private Sub Timer1_Timer()
If Text2.Text > 20 Then Text2.Text = 15
If Text1.Text > 360 Then Text1.Text = 0
Text1.Text = Text1.Text + 1
Text2.Text = Text2.Text + 1
End Sub
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 14.02.2008 (Чт) 13:41

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

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 14.02.2008 (Чт) 14:22

при джижении по кругу увеличение радиуса искожает модель
Еще бы, это уже движение по спирали. У круга радиус постоянный вообще-то.
Лучший способ понять что-то самому — объяснить это другому.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 14.02.2008 (Чт) 14:34

Antonariy
формула существует для данной задачи?
Все мои игрушки мама разметало ураганом...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 14.02.2008 (Чт) 15:42

Тебе нужно пересмотреть формулы расчета координат
расстояние = скорость в час/60/60*timer1.interval /1000
нужно считать не линейное расстояние, а угол поворота вокруг оси при определенной угловой скорости, которую можно получить из линейной. И расстояние приобретает тогда смысл угла поворота. Вот этот угол поворота и нужно подставлять в синус и косинус. т.е:
x = расстояние_радиус_круга * sin(1.74532925199433E-02*(-расстояние_угол_поворота)+3.14159265358979)
y = расстояние_радиус_круга * cos(1.74532925199433E-02*(расстояние_угол_поворота)+3.14159265358979)

Формулы пересчета линейной скорости в угловую
Vлин = ω_углов * R => ω_угл = Vлин/R
и получение угла:
α = ω t + const , где const можешь принять за ноль
это я подсмотрел
здесь

Теперь формула приобретет вид:
Угол_поворота = (скорость в час/60/60)*(timer1.interval /1000) / R_окружности
и соответственно вычисления координат:
x = расстояние_радиус_круга * sin(1.74532925199433E-02*(-Угол_поворота)+3.14159265358979)
y = расстояние_радиус_круга * cos(1.74532925199433E-02*(Угол_поворота)+3.14159265358979)

З.Ы. Да и по моему Угол поворота получается в радианах и дополнительно переводить не нужно при вычислении синуса и косинуса
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 96

    TopList  
cron