Форум программистов, компьютерный форум, киберфорум
Программирование мультимедиа
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 14.04.2014
Сообщений: 35
1

Как обратиться к элементу массива слайдов для анимирования точек сегмента сферы?

08.08.2016, 18:32. Показов 1509. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет. У меня есть последовательность слайдов, все в массиве. Из массива строиться сфера
по формуле сферы в трехмерном пространстве.
Хочу анимировать точки сигмента сферы.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
            var radius = 110;
                for ( var i = 0; i < particlesTotal; i ++ ) {
                    var phi = Math.acos( -1 + ( 2 * i ) / particlesTotal );
                    var theta = Math.sqrt( particlesTotal * Math.PI ) * phi;
                    positions.push(
                        radius * Math.cos( theta ) * Math.sin( phi ) - s_x,
                        radius * Math.sin( theta ) * Math.sin( phi )- s_y,
                        radius * Math.cos( phi ) + s_z
                    );
                }
....................
 function transition() {
 
                //var offset = current * particlesTotal * 3;
                var duration = 2000;
                for ( var i = 0, j = 0; i < particlesTotal; i ++, j += 3 ) {
                    var object = objects[ i ];
                    new TWEEN.Tween( object.position )
                        .to( {
                            x: positions[ j ],
                            y: positions[ j + 1 ],
                            z: positions[ j + 2 ]
                        }, Math.random() * duration + duration )
                        .easing( TWEEN.Easing.Exponential.InOut )
                        .start();
              
                }
..................в одну "сторону "
            function ekv(val){
              var tween = new TWEEN.Tween(objects[val].position)
                .to({
                     x: positionsV[ val*3 ] - s_x,
                     y: positionsV[ val*3+1 ] - s_y,
                     z: positionsV[ val*3+2 ] + s_z}, 750)
                .easing(TWEEN.Easing.Back.Out)
                .start();
            }
.....................а в "другие стороны" - может кто формулой кинеться ?? заранее спасибо
На скрине указала
Миниатюры
Как обратиться к элементу массива слайдов для анимирования точек сегмента сферы?  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2016, 18:32
Ответы с готовыми решениями:

Как обратиться к элементу массива
Всем привет. Есть массив такого вида Array ( =&gt; 12 ...

Как обратиться к элементу массива?
Заранее извиняюсь за нубство, но ассемблер начал изучать вчера(буквально) и много чего пока не...

Как обратиться к элементу строкового массива
Добрый вечер ;). Подскажите что значит ошибка &quot;SelectedItem не является членом String&quot; в строке. ...

Как обратиться к предыдущему элементу массива
Доброго времени суток. В общем задача такова: нужно создать двумерный массив 20 на 20 в котором...

16
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
08.08.2016, 19:51 2
Объясните мне, пожалуйста, как вы собираетесь выводить сферу на экран? С помощью WebGL и элемента canvas? А что должно быть во время анимации? Эти шарики должны уходить внутрь сферы, а потом вылазить немного наружу?
0
2 / 2 / 0
Регистрация: 14.04.2014
Сообщений: 35
08.08.2016, 20:08  [ТС] 3
Добрый вечер, спасибо за отзыв. Сфера выводится с помощью three.js посредствам CSS3DRenderer у меня есть 2 массива position - окружности R1(начальная позиция) и R2. Каждую секунду рандомно выбирается объект и по средствам TWEEN ему присваевается позиция при R2. Т.е. объект словно "выпирается" из сферы. Я хочу реализовать, чтобы у меня выпирался))) не только один объект, но и его близлежащие соседи... Каким образом мне к ним обратиться?
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
08.08.2016, 20:43 4
А то что на картинке вы сами вывели? Вы умеете выводить шарики на экран?
0
2 / 2 / 0
Регистрация: 14.04.2014
Сообщений: 35
08.08.2016, 21:07  [ТС] 5
ахахах...да, это print screen шариков на экране.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
08.08.2016, 21:40 6
Цитата Сообщение от skvorec Посмотреть сообщение
это print screen шариков на экране.
Я подумал это print screen вашего текущего результата. Я хотел узнать, вы умеете выводить один шарик?
0
2 / 2 / 0
Регистрация: 14.04.2014
Сообщений: 35
08.08.2016, 21:42  [ТС] 7
Да, умею...
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
08.08.2016, 22:39 8
Это уже хорошо. А можете вывести маленькие сферы по кругу? Если можете, по покажите скрин и код.
0
2 / 2 / 0
Регистрация: 14.04.2014
Сообщений: 35
08.08.2016, 22:43  [ТС] 9
скрин, прикрепленный в вопросе и есть сферы, выведеные "по кругу" тем кодом, что я прикрепила также к вопросу. Это обычная формула сферы.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
08.08.2016, 23:04 10
А ну круто, значит, всё таки это не левый скрин и ваши маленькие сферы расположены на поверхности одной большой сферы.

Вам нужно изучить, как двигать объект по таймеру от одной точки к другой. Вы не пробовали взять одну сферу и заставить её плавно перемещаться с заданной скоростью от одной точки к другой и обратно?
0
2 / 2 / 0
Регистрация: 14.04.2014
Сообщений: 35
08.08.2016, 23:16  [ТС] 11
Смотрите. Я , наверно, очень сумбурно выразилась. Моя задача, рандомно выбрать одну из сфер и изменить ее координаты(это все круто и плавно играет), Я хочу взять и изменить координаты 8 ее соседям, что окружают ее. Я могу выбрать 2 соседних элемента, т.к. чисто логически , я к ним могу обратиться по objects[ i - 1] и objects[ i + 1 ]. Но я не знаю как обратиться к остальным ее соседям.
0
47 / 47 / 7
Регистрация: 26.12.2014
Сообщений: 189
09.08.2016, 10:28 12
Цитата Сообщение от skvorec Посмотреть сообщение
Но я не знаю как обратиться к остальным ее соседям.
Ну нормаль у тебя уже есть есть, можно пустить 8 лучей с одним направлением и найти ближайшие пересечения. Только если у тебя есть массив этих сфер.
0
2 / 2 / 0
Регистрация: 14.04.2014
Сообщений: 35
09.08.2016, 10:50  [ТС] 13
Вот тут то и бида, не могу сообразить как это сделать? Сферы в массиве есть
0
47 / 47 / 7
Регистрация: 26.12.2014
Сообщений: 189
09.08.2016, 18:21 14
Цитата Сообщение от skvorec Посмотреть сообщение
Вот тут то и бида, не могу сообразить как это сделать? Сферы в массиве есть
Ну могу скинуть реализацию на Visual Basic. Поидее ведь всеравно начем матан. Надо?
0
2 / 2 / 0
Регистрация: 14.04.2014
Сообщений: 35
09.08.2016, 20:14  [ТС] 15
Было бы супер. Я разберусь)
0
47 / 47 / 7
Регистрация: 26.12.2014
Сообщений: 189
09.08.2016, 20:38 16
Лучший ответ Сообщение было отмечено skvorec как решение

Решение

Цитата Сообщение от skvorec Посмотреть сообщение
Было бы супер. Я разберусь)
Держите:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    Private Function Matrix_From_Radiys(ByVal v As Vector3) As Matrix
 
        Dim v_norm As Vector3 = Math2.Normalize(v)
 
        Dim q As Vector4 = Math2.Quaternion_From_Yaw_Pitch_Roll(Math.Asin(v_norm.Y), Math.Acos(v_norm.X), Math.Atan(v_norm.Z))
 
        Return Math2.Quaternion_To_Matrix(q)
 
    End Function
 
    Private Function Shoot_Radian(ByVal centr As Vector3, ByVal r As Single,
                                  ByVal n As Vector3) As Boolean 'Тут пускаем луч
 
        'Нужно знать диаметр большой сферы из сфер и взять чуть больше, также шаг должен быть меньше радиуса маленьких сфер
 
        Dim start As Vector3 = n * 100
 
        For i As Int32 = 0 To 200
 
            Dim d As Vector3 = start - n * i ' * радиус маленькой сферы / 2.0f
 
            If r * r >= Math.Sqrt((d.X - centr.X) ^ 2.0F + (d.Y - centr.Y) ^ 2.0F + (d.Z - centr.Z) ^ 2.0F) Then
 
                Return True
 
            End If
 
 
        Next
 
        Return False
 
        'Можно конечно спроецировать центр сферы на плоскость, но это сложней в понимании.
 
    End Function
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Dim r As Vector3 = New Vector3(0.0F, 1.0F, 0.0F) 'Точка на сфере, в твоем случае - это центр твоей случайной сферы.
 
        Dim collision_v As Vector3 = New Vector3(-1.0F, 0.0F, 0.0F) 'пускаемый луч, проще будет просто подобрать 8 таких
 
        Dim sphere_m As Matrix = Me.Matrix_From_Radiys(r) 'превращаем радиус в матрицу
 
        Dim bind As Matrix = Me.Matrix_From_Radiys(collision_v) 'Биндим луч
        bind.Invert()
 
        Dim n As Vector3 = Math2.XYZ(Math2.Mul(bind * sphere_m, New Vector4(collision_v.X, collision_v.Y, collision_v.Z, 1.0F))) 'Получаем трансформированный вектор луча
 
        n = Math2.Normalize(n) 'направление луча
 
 
        'Далее пробегаемся по массиву сфер, проверяем пересекла ли прямая сферу Shoot_Radian
        'Будет получаться 1-2 сферы, нужно выбрать ближайшую к точке на сфере(дистанция между 2мя точками)
 
        'Ну вобщем-то както так...
 
    End Sub
1
2 / 2 / 0
Регистрация: 14.04.2014
Сообщений: 35
09.08.2016, 20:45  [ТС] 17
Спасибо, буду разбираться, результатом поделюсь)
0
09.08.2016, 20:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2016, 20:45
Помогаю со студенческими работами здесь

Как обратиться к последнему элементу массива
Как обратиться к последнему элементу массива в паскале?

Как обратиться к элементу массива в классе?
/* * To change this license header, choose License Headers in Project Properties. * To change...

Как обратиться к конкретному элементу массива?
не понимаю, как используя дженерики, вывести конкретный элемент массива. в виде: номер...

Как обратиться к элементу массива, полученного из массива ячеек?
Господа, давненько не спрашивал вас о чём-либо, однако пора. Как обратиться к элементу массива....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru