Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
3 / 3 / 8
Регистрация: 14.10.2012
Сообщений: 288

Вращение в плоскости XYZ

12.12.2016, 02:34. Показов 1310. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Построил ось в пространстве XYZ. если смотреть перпендикулярно оси z(она у меня направлена в плоскость экрана), то ось построена по графику y = x;

Если посмотреть под углом, что видно, что это орбита.

Строил орбиту(ось) по следующему алгоритму
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void Draw(TransformMatrix transform2)
        {
            TPoint buf5 = new TPoint();
            for (int l = 0; l < 180; l ++)
            {
                buf5.setX(270 * Math.Cos(45) * Math.Cos(l) + 350);
                buf5.setZ(270 * Math.Sin(l));
                buf5.setY(-270 * Math.Cos(45) * Math.Cos(l) + 350);
 
                TPoint _p5 = buf5.ToView(transform2);
                zbuffer.setColor(_p5.getIntX(), _p5.getIntY(),
                      Color.FromArgb((int)(_p5.getColor().R * 1), (int)(_p5.getColor().G * 0), (int)(_p5.getColor().B * 1)));
            }
        }
где ToView(transform2) отображение точки в 3D в 2D.
C#
1
2
3
4
5
6
7
8
9
10
11
12
        public TPoint ToView(TransformMatrix view)
        {
 
            TPoint vp = new TPoint();
            vp.setX(x * view.matrix[0, 0] + y * view.matrix[1, 0] +
                    z * view.matrix[2, 0] + view.matrix[3, 0]);
            vp.setY(x * view.matrix[0, 1] + y * view.matrix[1, 1] +
                    z * view.matrix[2, 1] + view.matrix[3, 1]);
            vp.setZ(x * view.matrix[0, 2] + y * view.matrix[1, 2] +
                    z * view.matrix[2, 2] + view.matrix[3, 2]);
            return vp;
        }
По данной орбите у меня вращается сфера(это электрон). Но проблема в том, что она вращается не по окружности(т.е. не по орбите) а по какому-то эллипсу. Я не пойму в чем дело.
Вращаю я его следующим образом.
C#
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
public double [,] matrix = {
            {1, 0, 0, 0},
            {0, 1, 0, 0},
            {0, 0, 1, 0},
            {0, 0, 0, 1}
        };
public void RotateXY(double angle)
       {
           
           mult_matrix(RotationX(angle));
           mult_matrix(RotationY(angle));
       }
public double[,] RotationX(double angle)
        {
            double[,] buf = {
                {1, 0, 0, 0},
                {0, Math.Cos(angle), Math.Sin(angle), 0},
                {0, -Math.Sin(angle), Math.Cos(angle), 0},
                {0, 0, 0, 1}
            };
            return buf;
        }
        public double[,] RotationY(double angle)
        {
            double[,] buf = {
                {Math.Cos(angle), 0, -Math.Sin(angle), 0},
                {0, 1, 0, 0},
                {Math.Sin(angle), 0, Math.Cos(angle), 0},
                {0, 0, 0, 1}
            };
            return buf;
        }
private void mult_matrix(double[,] transform)
        {
            double [,] buf = new double [4,4];
            for (int i = 0; i < 4; i++)
                for (int j = 0; j < 4; j++)
                {
                    buf[i, j] = 0;
                    for (int k = 0; k < 4; k++)
                        buf[i, j] += matrix[i, k] * transform[k, j];
                }
            matrix = buf;
        }
т.е. использую матрицы перехода. Но где-то в этом преобразовании у меня ошибка.
Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2016, 02:34
Ответы с готовыми решениями:

График в координатах XYZ
Добрый день! Есть набор точек: X Y Z 1 1 2 3 4 5 4 2 8 По данным точкам (точки исключительно для примера)...

Вращение плоскости с фигурами в Delphi
Добрый день, подскажите пожалуйста, в данный момент в программе при осуществлении поворота против\по часовой стрелке происходит...

Вращение тела в вертикальной плоскости
Условие: Груз массой m вращают равномерно (с постоянной по модулю скоростью) в вертикальной плоскости на нити длинной R. определить...

4
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
12.12.2016, 09:23
animate atom
Вложения
Тип файла: rar animate_atom.rar (23.3 Кб, 9 просмотров)
0
3 / 3 / 8
Регистрация: 14.10.2012
Сообщений: 288
12.12.2016, 15:58  [ТС]
afront, спасибо конечно, но это не то.
Я реализую 3D графику. и у меня все в 3D происходит. Использовать можно только getPixel(), setPixel. Намного лучше было бы, если бы вы указали где у меня ошибку в матрице перехода.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
13.12.2016, 02:29
Цитата Сообщение от Nike1995 Посмотреть сообщение
Math.Cos(45) * Math.Cos(l)
Вообще-то тригонометрические функции Math принимают на вход углы в радианах, а не в градусах.
0
3 / 3 / 8
Регистрация: 14.10.2012
Сообщений: 288
13.12.2016, 02:52  [ТС]
Storm23, спасибо. это кое в чем помогло(устранил костыль). Но прежняя проблема осталась.
Электрон по прежнему двигается не по орбите(в отличии от остальных).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2016, 02:52
Помогаю со студенческими работами здесь

Вращение треугольника на координатной плоскости
Помогите, пожалуйста, написать программу. Нарисовать треугольник на координатной плоскости в Delphi либо C#. A(3,2), B(7,6), C(7,2). И...

Вращение объекта параллельно плоскости сферы
Имеется сфера (&quot;Земной шар&quot;) и несколько моделей движущихся самолетов(или ракет). Необходимо, чтобы они все время были повернуты...

Постледствия трансформации xyz.ru -> www.xyz.ru
Дано: есть два зеркала сайта xyz.ru и www.xyz.ru в робот.txt для индексации прописан xyz.ru (без www) PR(xyz.ru) =2 ...

Построение платоновых тел и их вращение в заданной плоскости вокруг своей оси
разработка программы построение платоновых тел и их вращение в заданной плоскости вокруг своей оси , движение по заданным координатам

Вращение прямоугольника заданных размеров в плоскости экрана вокруг своего центра
Изобразить вращения прямоугольника заданных размеров в плоскости экрана вокруг свае во центра Помогите а то я Написал а она не...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru