Четверг, 18 Апреля 2024, 06:30

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Общие обсуждения программистов » Траектория движения, похожая на винтовую линию
Траектория движения, похожая на винтовую линию
Gargolev2Дата: Вторник, 12 Июня 2012, 13:46 | Сообщение # 1
уже был
Сейчас нет на сайте

хочу получить примерно такую же траекторию в плоскости, как нарисовано на этом рисунке. В пространстве это была бы винтовая линия, а так получается что-то похожее на петли
Есть идеи, как это может быть реализовано?
GECKДата: Вторник, 12 Июня 2012, 14:58 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Берешь параметрическую кривую x(t) = cos(4*t)+t, y(t) = sin(4*t), и вычисляешь точку траектории в каждый момент времени.

Всё гениальное просто. И хреново работает.
-Mikle-Дата: Вторник, 12 Июня 2012, 15:06 | Сообщение # 3
Изобретатель велосипедов
Сейчас нет на сайте
На VB6:
Code

Option Explicit

Const a = 0.2
Const b = 0.01
Const bb = 50
Const c = 0.01
Const cc = 100

Private Sub Form_Click()
   Dim x As Single, y As Single, t As Single
    
   For t = 0 To 3500
     x = t * a + Sin(t * b) * bb
     y = Cos(t * c) * cc
     PSet (x, y)
   Next t
End Sub

Private Sub Form_Load()
   ScaleLeft = 0
   ScaleWidth = 500
   ScaleTop = -150
   ScaleHeight = 300
End Sub
MatouДата: Вторник, 12 Июня 2012, 15:33 | Сообщение # 4
Исходный коТ
Сейчас нет на сайте
Параметрические кривые тут лишние. Лучше взять вращательное и прямолинейное движение и сложить их.


GECKДата: Вторник, 12 Июня 2012, 17:21 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Quote (Matou)
Лучше взять вращательное и прямолинейное движение и сложить их.

Дык мы с -Mikle- это и предлагаем.


Всё гениальное просто. И хреново работает.
Gargolev43Дата: Среда, 13 Июня 2012, 12:31 | Сообщение # 6
частый гость
Сейчас нет на сайте
спасибо, почти получилось:
Code
    CGPoint pos = self.position;
     currentTime += dt;
     pos.x = startX - 50 * currentTime - 20 * cosf(4 * currentTime);
     pos.y = activationDistance + 50 * (sinf(PI + 4 * currentTime) - 1);
     self.position = pos;

Но появились еще вопросы:
1)можно ли теперь в этой штуке увеличить расстояние между петлями? Если меняю параметр перед currentTime, то петли исчезают и становится похоже на это (слева сверху):

если меняю параметр перед cosf, то амплитуда изменяется
2)как теперь узнать угол касательной, чтобы все время разворачивать изображение по направлению движения?
GECKДата: Среда, 20 Июня 2012, 15:36 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Слоупок спешит на помощь smile
Quote (Gargolev43)
1)можно ли теперь в этой штуке увеличить расстояние между петлями?

По идее нужно уменьшить коэффициент перед косинусом. Амплитуду по Y это никак не затронет.

Quote (Gargolev43)
2)как теперь узнать угол касательной, чтобы все время разворачивать изображение по направлению движения?

arctg(Y'(t) / X'(t))


Всё гениальное просто. И хреново работает.
Форум игроделов » Программирование » Общие обсуждения программистов » Траектория движения, похожая на винтовую линию
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг