Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/41: Рейтинг темы: голосов - 41, средняя оценка - 4.98
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
1

Движение по синусоиде

20.01.2016, 21:45. Показов 8531. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть анимация солнечной системы. Земля вращается вокруг Солнца, а Луна вокруг Земли. Нужно сделать так, чтобы Земля перемещалась по синусоиде.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Animation
{
    public partial class Galaxy : Form
    { // декларация переменных, описывающих движение Земли и Луны
        float UgolWrascheniaZemli = 0;
        float UgolWrascheniaLuny = 0;
 
        // прирост изменения положения Земли и Луны
        float PrirostUglaWrascheniaZemli = 0.05f;
        float PrirostUglaWrascheniaLuny = 0.1f;
 
        public Galaxy()
        {
            InitializeComponent();
            
            this.Left = 10;
            this.Top = 10;
            this.Width = (int)(Screen.PrimaryScreen.Bounds.Width * 0.7f);
            this.Height = (int)(Screen.PrimaryScreen.Bounds.Height * 0.85f);
           
            this.BackColor = Color.DarkBlue;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            UgolWrascheniaZemli = UgolWrascheniaZemli + PrirostUglaWrascheniaZemli;
            if (UgolWrascheniaZemli >= 360)
                UgolWrascheniaZemli = 0;
 
            UgolWrascheniaLuny = UgolWrascheniaLuny + PrzyrostKątaObrotuKsiężyca;
            if (UgolWrascheniaLuny >= 360)
                UgolWrascheniaLuny = 0;           
            this.Refresh();
        }
              
        private void Galaxy_Paint(object sender, PaintEventArgs e)
        {
            // рисовка Солнца
            e.Graphics.FillEllipse(Brushes.Yellow, this.Width / 2 - 80, this.Height / 2 - 80, 160, 160);
 
            // вычисления положения Земли
            float Zx = (float)(0.01) + (float)(this.Width / 2 + this.Width / 4 * Math.Sin(UgolWrascheniaZemli));
            float Zy = (float)(this.Height / 2 - this.Width / 4 * Math.Cos(UgolWrascheniaZemli));
 
            // рисовка Земли
            e.Graphics.FillEllipse(Brushes.LimeGreen, Zx - 25, Zy - 25, 50, 50);
 
            // вычисления положения Луны
            float Kx = (float)(Zx + this.Width / 12 * Math.Sin(UgolWrascheniaLuny));
            float Ky = (float)(Zy - this.Width / 12 * Math.Cos(UgolWrascheniaLuny));
 
            // рисовка Луны
            e.Graphics.FillEllipse(Brushes.LightYellow, Kx - 5, Ky - 5, 10, 10);
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2016, 21:45
Ответы с готовыми решениями:

Движение обьекта по синусоиде
В моей программе содержится обьект который создается и перемещается по заданным координатам. А по...

Движение объекта по параболе и синусоиде
Помогите решить задачку: Нужно заставить точку двигаться 1) по параболе 2) по синусоиде Ооооочень...

Создайте программу, показывающую движение окружности по синусоиде
Создайте программу, показывающую движение окружности по синусоиде

Анимация. Как сделать, чтобы окружность двигалась по синусоиде?
Создать программу, показывающую движение окружности по синусоиде. Добавлено через 2 минуты...

18
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
21.01.2016, 06:27 2
Ну к примеру в расчете положения земли:
C#
1
float Zy = (float)(this.Height / 2 - this.Width / 4 * Math.Cos(UgolWrascheniaZemli) * 1.3D);
0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
21.01.2016, 20:35  [ТС] 3
Не обязательно Земля должна вращаться вокруг Солнца. Она может перед ним перемещаться по синусоиде. Можно менять переменные, если требуется
0
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
21.01.2016, 20:50 4
Цитата Сообщение от JuliDragomir Посмотреть сообщение
Земля вращается вокруг Солнца
Цитата Сообщение от JuliDragomir Посмотреть сообщение
Не обязательно Земля должна вращаться вокруг Солнца
Эмм?
0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
21.01.2016, 20:56  [ТС] 5
Я имею в виду, что в написанной уже программе она вращается вокруг Солнца. Эту траекторию нужно изменить
0
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
22.01.2016, 01:41 6
Цитата Сообщение от JuliDragomir Посмотреть сообщение
Эту траекторию нужно изменить
Мы тут не экстрасенсы догадываться.
Конкретнее задачу можно ставить?
0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
22.01.2016, 01:55  [ТС] 7
Изменить движение Земли вокруг Солнца на движение по синусоиде. Допустим, из левой части окна в правую
0
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
22.01.2016, 02:51 8
Ну меняйте тогда коэффициент не у координаты Y а у координаты X (* 1.xD)
P.S. Я тупой. У меня образование 8 классов
Не понимаю что в данном примере значит - по синусоиде.
Картинку нарисуйте от руки что ли.
0
Даценд
22.01.2016, 10:57
  #9

Не по теме:

HectorPrima,
Этот вопрос напомнил о семи перпендикулярных линиях.
http://note5.i4.by/note/7-kras... ogo-cveta/

0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
22.01.2016, 15:41  [ТС] 10
Вот
Миниатюры
Движение по синусоиде  
0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
22.01.2016, 15:52  [ТС] 11
HectorPrima, от изменения коэффициента меняется только скорость перемещения Земли
0
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
22.01.2016, 16:04 12
Цитата Сообщение от JuliDragomir Посмотреть сообщение
изменения коэффициента меняется только скорость перемещения Земли
А вы мой код хоть пробовали?
Если нет то это печально. Попробуйте к примеру вместо 1.3D поставить 3D
0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
22.01.2016, 16:19  [ТС] 13
HectorPrima, извиняюсь, сперва не было заметно, что оно стало двигаться не по кругу, а по овалу. Изминения есть, но всё же, ещё не то
0
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
22.01.2016, 16:45 14
Ну я не понимаю как двигаться земле по синусоиде вокруг солнца.
0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
22.01.2016, 16:51  [ТС] 15
HectorPrima, да говорю, что траекторию нужно менять. Всё. Не крутится больше вокруг Солнца. Только перемещается по синусоиде вдоль оси Х
0
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
22.01.2016, 16:58 16
Начинает слева, упирается в правую сторону и дальше что?
0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
22.01.2016, 17:02  [ТС] 17
HectorPrima, обратно в левую сторону. И так с права на лево, с лева на право.
Миниатюры
Движение по синусоиде  
0
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
22.01.2016, 17:07 18
Лучший ответ Сообщение было отмечено Ev_Hyper как решение

Решение

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace Earth
{
    public partial class Form1 : Form
    { // декларация переменных, описывающих движение Земли и Луны
        float UgolWrascheniaZemli = 0;
        float UgolWrascheniaLuny = 0;
 
        // прирост изменения положения Земли и Луны
        float PrirostUglaWrascheniaZemli = 0.05f;
        float PrirostUglaWrascheniaLuny = 0.1f;
        float Zx;
        bool ToRight = true;
 
        public Form1()
        {
            InitializeComponent();
 
            this.Left = 10;
            this.Top = 10;
            this.Width = (int)(Screen.PrimaryScreen.Bounds.Width * 0.7f);
            this.Height = (int)(Screen.PrimaryScreen.Bounds.Height * 0.85f);
 
            this.BackColor = Color.DarkBlue;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            UgolWrascheniaZemli = UgolWrascheniaZemli + PrirostUglaWrascheniaZemli;
            if (UgolWrascheniaZemli >= 360)
                UgolWrascheniaZemli = 0;
 
            UgolWrascheniaLuny = UgolWrascheniaLuny + PrirostUglaWrascheniaZemli;
            if (UgolWrascheniaLuny >= 360)
                UgolWrascheniaLuny = 0;
            this.Refresh();
        }
 
        private void Galaxy_Paint(object sender, PaintEventArgs e)
        {
            // рисовка Солнца
            e.Graphics.FillEllipse(Brushes.Yellow, this.Width / 2 - 80, this.Height / 2 - 80, 160, 160);
 
            // вычисления положения Земли
            if (ToRight)
            {
                Zx += 4;
                if ((int)Zx > this.Size.Width)
                    ToRight = false;
            }
            else
            {
                Zx -= 4;
                if ((int)Zx < 0)
                    ToRight = true;
            }
            float Zy = 200 + (float)(this.Height / 2 - this.Width / 4 * Math.Cos(UgolWrascheniaZemli) / 5D);
 
            // рисовка Земли
            e.Graphics.FillEllipse(Brushes.LimeGreen, Zx - 25, Zy - 25, 50, 50);
 
            // вычисления положения Луны
            float Kx = (float)(Zx + this.Width / 12 * Math.Sin(UgolWrascheniaLuny));
            float Ky = (float)(Zy - this.Width / 12 * Math.Cos(UgolWrascheniaLuny));
 
            // рисовка Луны
            e.Graphics.FillEllipse(Brushes.LightYellow, Kx - 5, Ky - 5, 10, 10);
        }
    }
}
1
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 47
22.01.2016, 17:56  [ТС] 19
HectorPrima, ЧЕ-ЛО-ВЕ-ЧИ-ЩЕ
Спасибо огромнейшее
0
22.01.2016, 17:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2016, 17:56
Помогаю со студенческими работами здесь

Движение по синусоиде
Подскажите, пожалуйста, как реализовать движение спрайта по синусоиде? Сейчас движется только...

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

Движение по синусоиде
Разработать программу, моделирующую движение шарика по синусоиде. При ударе о стену шарик должен...

Движение кружка на синусоиде
Здравствуйте. Помогите решить проблему. Задание такое: нарисовать синусоиду и через таймер...


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

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