IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Синусоидальное движение объекта Shape, Visual basic 6.0
сообщение
Сообщение #1


Гость






Уважаемые товарищи программисты!!!!
Прошу прощения у вас за мою тему, но я уже какой день не могу реализовать вот что:

Мне надо сделать синусоидальное движение объекта Shape
пожалуйста кому не трудно выложите пожалуйста код реализации этого или же подробнейший алгоритм как написать код(подробнейший потому что я с бейсиком знаком не очень сильно=))))

Заранее благодарен вам, товарищи программисты!!!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






up
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Поясни подробнее, что за синусоидальное движение (они могут быть разные - по одной переменной? по двум? трем?..) тебе надо. И приведи то, что уже сам сделал. Короче - помоги тем, кто тебе помогает smile.gif. Тогда получишь ответ..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






В общем получается движение как я понял движение по формуле y=sin(x)
х задается и по известному х находится у
вот и надо чтоб фигура Shape двигалась по синусоиду(по графику синуса у=sin(x))

то что у меня есть я думаю не стоит выкладывать потому что ваще бред и не работает
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Движением обычно называется зависимость коородинат от времени. Пока я вижу только зависимость координат между собой, и ничего не могу понять.
Цитата(-CherkaS- @ 12.11.2007 13:06) *

потому что ваще бред и не работает
Именно потому и покажи. Рабочие программы тут никто и не выкладывают. Все приходят за исправлением нерабочих.
Покажи - исправим.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






вот смотри какой алгорим примерна должен быть:

y=sin(t)
А если точнее y = y0 + sin(t). Задаешь начальное местоположение (x0,y0). Подбираешь delta_t, чтоб не сильно частые волны были (начать лучше где-то с 0.01).
Организуешь цикл по x (сначала x = x0). В цикле x = x + 1, t = t + delta_t, по верхней формуле определяешь новый y.

Что то типа этого.
я сделал только беспорядочное движение:
Код

Private Sub Form_Load()
With Shape1
    .FillColor = vbRed
    .FillStyle = vbSolid
    .BorderStyle = vbBSNone
End With
With Timer1
    .Enabled = True
    .Interval = 500
End With

End Sub

Private Sub Timer1_Timer()
Const Pi As Single = 3.14
Dim x As Integer, y As Integer
Dim gor As Boolean, vert As Boolean
Randomize
With Shape1
x=.width*rnd-.width/2
gor = (.Left + x) < 0 Or (.Left + .Width + x > ScaleWidth)
y=.height*rnd-.height/2
vert = (.Top + y) < 0 Or (.Top + .Height + y > ScaleHeight)
End With
If vert Then y=0
if gor then x=0

With Shape1
    .Move .Left + x, z
End With

End Sub



беспорядочно движется а вот по синусу чтоб двигался не могу сделать кода как такового нет потому что я его удаляю в порыве бешенства так сказать =(((
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Код перепутал немного

вот правильный
Код

Private Sub Form_Load()
With Shape1
    .FillColor = vbRed
    .FillStyle = vbSolid
    .BorderStyle = vbBSNone
End With
With Timer1
    .Enabled = True
    .Interval = 500
End With

End Sub

Private Sub Timer1_Timer()
Const Pi As Single = 3.14
Dim x As Integer, y As Integer
Dim gor As Boolean, vert As Boolean
Randomize
With Shape1
x=.width*rnd-.width/2
gor = (.Left + x) < 0 Or (.Left + .Width + x > ScaleWidth)
y=.height*rnd-.height/2
vert = (.Top + y) < 0 Or (.Top + .Height + y > ScaleHeight)
End With
If vert Then y=0
if gor then x=0

With Shape1
    .Move .Left + x, .top+y
End With

End Sub



Сообщение отредактировано: CherkaS -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


ЧТо нет идей???
блин ну помогите пожалуйста
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Если тебе нужны формулы, то можешь попробовать типа вот эти:

x = .left + .width/L*i
y = (Sin(4*Pi*i/L)+1)/2*.Hight

Здесь i изменяется от 0 до L, можешь это делать в цикле. Возьми L равным так 200 или 300.. Это, конечно, не есть настоящее движение по синусоиде.. Просто график синусоиды. Подойдет?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


вот что у мя получилось сегодня но он поднимается и все я не могу сделать ограничения чтоб если t дошел до единица пошел вниз до нуля опять вверх и тд

помогите исправить пожалуйста
Код

Dim x As Integer, y As Integer
Private Sub Form_Load()
Show
End Sub
Private Sub Form_Initialize()
With Shape1
    .FillColor = vbRed
    .FillStyle = vbSolid
    .BorderStyle = vbBSNone
End With
With Timer1
    .Enabled = True
    .Interval = 50
End With
x = 0
t = 0
End Sub

Private Sub Timer1_Timer()

t_delta = 0.01
t = t + t_delta



With Shape1
    .Move .Left + x, .Top - y
End With
x = x + 1
y = Sin(t) * 900
End Sub


Сообщение отредактировано: CherkaS -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


еще один вариант но все также двигается только вверх надо сделать ограничение чтоб до определеного значения y вверх потом вниз тоже до определенного значения и опять вверх и тд

Код
Dim x As Integer, y As Integer
Private Sub Form_Load()
Show
End Sub
Private Sub Form_Initialize()
With Shape1
    .FillColor = vbRed
    .FillStyle = vbSolid
    .BorderStyle = vbBSNone
End With
With Timer1
    .Enabled = True
    .Interval = 50
End With
x = 0
y = 0
t = 0
i = 1
End Sub

Private Sub Timer1_Timer()
Const Pi = 3.14
t_delta = 0.01
L = 200
If t = 1 Then t = t - t_delta
With Shape1
    .Move .Left + x, .Top - y
End With
t = t + t_delta
i = i + 1
x = L / (i + 30)

y = ((Sin(4 * Pi * i / L) + 1) / 2) * 10

End Sub
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


где у меня здесь ошибка фигура Shape все равно идет вверх???

Код

Dim x As Integer, y As Integer
Private Sub Form_Load()
Show
End Sub
Private Sub Form_Initialize()
With Shape1
    .FillColor = vbRed
    .FillStyle = vbSolid
    .BorderStyle = vbBSNone
End With
With Timer1
    .Enabled = True
    .Interval = 50
End With
x = 0
y = 0
t = 0
i = 1
End Sub

Private Sub Timer1_Timer()
Const Pi = 3.14
t_delta = 0.01
L = 20

With Shape1
    .Move .Left + x, .Top - y
End With

i = i + 1
x = L / (i)
For s = -5 To 5                                               "Фигура должна идти вверх
y = ((Sin(4 * Pi * i / L) + 1) / 2) * 10
Next s
For s1 = 5 To -5                                             "Фигура должна идти вниз
y = ((Sin(4 * Pi * i / L) + 1) / 2) * (-10)
Next s1

End Sub

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


вот что получилсь в итоге

Код

Dim x As Integer, y As Integer
Private Sub Form_Load()
Show
n = 0
End Sub
Private Sub Form_Initialize()
With Shape1
    .FillColor = vbRed
    .FillStyle = vbSolid
    .BorderStyle = vbBSNone
End With
With Timer1
    .Enabled = True
    .Interval = 500
End With
x = 0
y = 0
i = 1
End Sub

Private Sub Timer1_Timer()
If n = 0 Then npm = 0
If n = 5 Then npm = 1

Const Pi = 3.14
L = 5
With Shape1
.Move x, .Top - y

i = i + 1
x = .Left + .Width / L * i

If npm = 0 Then
    n = n + 1
    y = (Sin(4 * Pi * i / L) + 1) / 2 * .Height
Else:
    n = n - 1
    y = (Sin(4 * Pi * i / L) + 1) / (-2) * .Height
End If
End With
End Sub


создаем модуль и прописываем там

Код

Public n As Integer
Public npm As Integer


проблема:
объект двигается по диагонале а мне надо что как по синусу!!!!! что у меня не правильно????
помогите пожалуйста!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.11.2020 14:30
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name