powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вращение точки.
21 сообщений из 21, страница 1 из 1
Вращение точки.
    #37785414
marinpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, помогите пожалуйста написать программу.

6 электронов с противоположными спинами вращаются по трем орбитам, изредка подергиваясь. Должна быть одна большая кнопка, при нажатии на которую включается магнитное поле и электрон вращаясь плавно переходит в плоскость XY и начинает вращаться в ней.

Что я не знаю как:
1. Подергивание (как сделать так, чтоб Rnd отдавало не одно рандомное число, а каждый раз разное? как сделать рандомный таймер? ну, чтоб все электроны не дергались синхронно, а по разному и по отдельности)
2. Как сделать плавный поворот электрона? Не чтоб он скакнул из XZ в XY, а чтоб плавненько повернулся, пройдя при этом пару раз по орбите?
3. Как сделать так, чтоб орбита стиралась ~ через пол периода? Можно конечно запустить вторую линию цвета фона с отставанием в пол периода, но это как-то некрасиво.
...
Рейтинг: 0 / 0
Вращение точки.
    #37785511
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marinpro1. Подергивание (как сделать так, чтоб Rnd отдавало не одно рандомное число, а каждый раз разное? как сделать рандомный таймер? ну, чтоб все электроны не дергались синхронно, а по разному и по отдельности)Зови rnd несколько раз подряд, тогда и будет каждый раз разное.
Таймер рандомным быть не может. Но можно завести для каждого электорна по счетчику. Сначала задаешь им случайные значения, а потом по таймеру все декрементируешь. Как только для какого-то электорона счетчик стал в ноль - дергаешь его и задаешь новое случайное значение в счетчик.

marinpro2. Как сделать плавный поворот электрона? Не чтоб он скакнул из XZ в XY, а чтоб плавненько повернулся, пройдя при этом пару раз по орбите?А как он у тебя по орбите ходит?

marinpro3. Как сделать так, чтоб орбита стиралась ~ через пол периода? Можно конечно запустить вторую линию цвета фона с отставанием в пол периода, но это как-то некрасиво.Именно так и надо. Либо стирать все и на каждом шагу рисовать всю картинку заново. Почитай учебники про двойную буферизацию чтобы картинка не дергалась.
...
Рейтинг: 0 / 0
Вращение точки.
    #37785535
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marinproкак сделать так, чтоб Rnd отдавало не одно рандомное число, а каждый раз разное?.а про randomize не забыл?
...
Рейтинг: 0 / 0
Вращение точки.
    #37786332
marinpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlЗови rnd несколько раз подряд, тогда и будет каждый раз разное.
Таймер рандомным быть не может. Но можно завести для каждого электорна по счетчику. Сначала задаешь им случайные значения, а потом по таймеру все декрементируешь. Как только для какого-то электорона счетчик стал в ноль - дергаешь его и задаешь новое случайное значение в счетчик.
Почему тут:
Код: vbnet
1.
2.
Randomize
a = Int(Rnd(5))


а всегда = 0?
Если cint, то а = 0 ... 1.
Мне нужны 0.1 ... 0.9, что делать?
White OwlА как он у тебя по орбите ходит?
Код: vbnet
1.
2.
3.
4.
5.
6.
Do
...
ndX = x8 * Sin(x628 / 360 * inTN): ndY = y8 * Cos(y628 / 360 * inTN)
...
inTN = inTN + 1: If inTN = 361 Then inTN = 1
Loop


x8, y8, x628, y628 вывела как скролл бары для поиграться
White OwlИменно так и надо. Либо стирать все и на каждом шагу рисовать всю картинку заново. Почитай учебники про двойную буферизацию чтобы картинка не дергалась.
Ясно, спасиб. Проще вторую линию.
...
Рейтинг: 0 / 0
Вращение точки.
    #37786397
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marinproRandomize
a = Int(Rnd(5)) даже не представляю, чего ты хотела добиться) при чём тут 5? вот довольно полная инфа об rnd 12493545
...
Рейтинг: 0 / 0
Вращение точки.
    #37786431
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marinproПочему тут:
Код: vbnet
1.
2.
Randomize
a = Int(Rnd(5))


а всегда = 0?
Если cint, то а = 0 ... 1.
Мне нужны 0.1 ... 0.9, что делать?Подсказываю: подумай над смыслом функции Int().

marinproWhite OwlА как он у тебя по орбите ходит?
Код: vbnet
1.
2.
3.
4.
5.
6.
Do
...
ndX = x8 * Sin(x628 / 360 * inTN): ndY = y8 * Cos(y628 / 360 * inTN)
...
inTN = inTN + 1: If inTN = 361 Then inTN = 1
Loop


x8, y8, x628, y628 вывела как скролл бары для поигратьсяНу вот, а теперь добавь к этой системе из двух уровнений третье, для Z. Иными словами, напиши уравнение круга в трехмерном пространстве.
...
Рейтинг: 0 / 0
Вращение точки.
    #37786634
vasatka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
marinpro Мне нужны 0.1 ... 0.9, что делать?
Код: vbnet
1.
2.
3.
4.
Dim a As Single
Randomize
a = Int(Rnd * 9 + 1) / 10
Print a
...
Рейтинг: 0 / 0
Вращение точки.
    #37837844
marinpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ... .
Finally, был написан маршрут с подёргиваниями и всем, чем нужно для одного электрона.
Теперь нужно сделать так, чтобы был 6 электронов и у всех были чуть-чуть разные орбиты.
Т.е. :
...
Рейтинг: 0 / 0
Вращение точки.
    #37837850
marinpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
marinproТак ... .
Finally, был написан маршрут с подёргиваниями и всем, чем нужно для одного электрона.
Теперь нужно сделать так, чтобы был 6 электронов и у всех были чуть-чуть разные орбиты.

Нечаянно отправила.
Т.е. :
Нужно чтобы было:
ndX = 8 * Sin(6.28 / 360 * inTN): ndY = 13 * Cos(6.28 / 360 * inTN)
для первого,
ndX = 4 * Sin(6.28 / 360 * inTN): ndY = 8 * Cos(6.28 / 360 * inTN)
для второго и т.д.

Короче, нужно сделать функцию, засунуть туда как-то переменные и вытаскивать значение в цикле при заданных переменных.
Как?
...
Рейтинг: 0 / 0
Вращение точки.
    #37838061
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marinproКороче, нужно сделать функцию, засунуть туда как-то переменные и вытаскивать значение в цикле при заданных переменных.
Как?
Что именно вы не знаете: как объявить функцию, или как прописать в ней параметры, или как вызывать ее в цикле?
...
Рейтинг: 0 / 0
Вращение точки.
    #37838113
marinpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
QValDmarinproКороче, нужно сделать функцию, засунуть туда как-то переменные и вытаскивать значение в цикле при заданных переменных.
Как?
Что именно вы не знаете: как объявить функцию, или как прописать в ней параметры, или как вызывать ее в цикле?
Ох, как бы объяснить.
Мне нужно давать этой ф-ии X = ndX * Sin(dX / 360 * inTN) + xx: Y = ndY * Cos(dY / 360 * inTN) + yy
ndX, dX, xx, ndY, dY , yy и получать назад X и Y шесть раз за цикл.
При этом, рисовать эти точки.
Как это сделать?
...
Рейтинг: 0 / 0
Вращение точки.
    #37838918
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marinpro,
я понимаю, что вам нужно, но я спрашивал, что вы из перечисленного не знаете.

ps http://www.sd-company.su/article/vba/functions
...
Рейтинг: 0 / 0
Вращение точки.
    #37839686
marinpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
QValDmarinpro,
я понимаю, что вам нужно, но я спрашивал, что вы из перечисленного не знаете.

ps http://www.sd-company.su/article/vba/functions

Блин, мне что-то в голову стукнуло что там нужны какие-то хитрые переменные с $, а гугл не может в поиск таких символов, вот и мучалась. Оказывается нужно просто каждый раз просто приравнивать их и всё будет ок.
Ладно, с этим разобралась, спасибо ( :

Теперь ещё пара вопросов:
1. Вот у меня сейчас 6 label с буквой e , символизируют электроны, вращаются внутри picturebox.
Как рисовать путь прямо за ними? Путь стирается вращающимся label`ом.
Делаю я вот так:
PicAnim.Line (ndX, ndY)-(odX, odY), vbBlack
odX = ndX: odY = ndY
Но т.к. у меня 6 точек, то и рисуются все 6 разом и получается какой-то ужас.

2. У каждой движущейся точки разные nX и nY:
ndX = dX + nX * Sin(Scal * (6.28 / 360 * inTN)): ndY = dY + nY * Cos(Scal * (6.28 / 360 * inTN))

Как постепенно привести их к одним nX и nY, чтобы они как бы плавно повернулись?
Засунуть в цикл со Step 0.5 ?
...
Рейтинг: 0 / 0
Вращение точки.
    #37839690
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
динамическая графика в таком варианте у вас не выйдет. юзайте directX.
...
Рейтинг: 0 / 0
Вращение точки.
    #37839892
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marinpro, вы в качестве исходников для своего использовали этот проект? Это я к тому, на что нам ориентироваться...
...
Рейтинг: 0 / 0
Вращение точки.
    #37839926
marinpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneдинамическая графика в таком варианте у вас не выйдет. юзайте directX.
Разве не получится?
Помоему тут можно просто наштамповать миллион всяких х1, х2, х3, ..., хn и всё будет рисовать, но можно ведь как-то сделать всё проще и красивее.

AndreTM marinpro, вы в качестве исходников для своего использовали этот проект? Это я к тому, на что нам ориентироваться...
Ага.
...
Рейтинг: 0 / 0
Вращение точки.
    #37840027
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на Picture или на Form если рисовать, то AutoRedraw. но всё мигает.
поэтому или уходите в строну GDI+ или рисуйте на контексте средствами API.

если нужно 3D со всякими сценами и вращениями, то это в сторону DirectX
...
Рейтинг: 0 / 0
Вращение точки.
    #37840180
marinpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneна Picture или на Form если рисовать, то AutoRedraw. но всё мигает.
поэтому или уходите в строну GDI+ или рисуйте на контексте средствами API.

если нужно 3D со всякими сценами и вращениями, то это в сторону DirectX

3д не нужно, просто вращающиеся точки.
ладно, фиг с маршрутом, нарисую статический.

Разворот.
Код: vbnet
1.
2.
3.
    dX = -20: dY = 20: nX = 8: nY = 13: Scal = 1 '1
    Call vr
L1.Move ndX, ndY


и таких 6 штук, у всех разный nX.
Нужно чтобы постепенно все пришли к nX=2.

Что значит символ $ у переменной?
...
Рейтинг: 0 / 0
Вращение точки.
    #37840184
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы про такое объявление?

Код: vbnet
1.
Dim s$




это string
...
Рейтинг: 0 / 0
Вращение точки.
    #37840281
marinpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneвы про такое объявление?
Код: vbnet
1.
Dim s$


это string
Ясно, спасибо.
marinproРазворот.
Код: vbnet
1.
2.
3.
    dX = -20: dY = 20: nX = 8: nY = 13: Scal = 1 '1
    Call vr
L1.Move ndX, ndY


и таких 6 штук, у всех разный nX.
Нужно чтобы постепенно все пришли к nX=2.


Как такое сделать?
В голову лезет только писать все новые nX в массив и потом доставать оттуда.
...
Рейтинг: 0 / 0
Вращение точки.
    #37896904
Vladimir-Meln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
marinpro, сделай несколко перемлуеных для одного электрода и так для всех и, сделай для всех электелектродов случайные числа.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вращение точки.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]