анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 427
1

Простая математическая модель вращения

23.05.2010, 22:05. Показов 2851. Ответов 9

Есть линия длинной len и центром в точке x,y
теперь вопрос - как заставить вращаться ее вокруг своего центра?
while(!kbnhit())
{
line(x1,y1,x2,y2);//уравнение построения прямой от точки x1,y1 до x2,y2
d++; // коэффициент поворота
}

Думаю приблизительно такое должно выйти
line(x-len/2,y+d,x+len/2,y-d); - но так длинна фигуры увеличивается и фигура просто растет...

оригинал задания:
Набор прямых линий вращается по кругу относительно некоторого центра, изменяя цвет. Вокруг этой фигуры имеется рамка из вписанных друг в друга прямоугольников, которая расширяется и сужается.

Пока немного кода, но может пригодится:
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
#include <iostream>
#include <time.h>
#include <graphics.h>
#include <dos.h>
#include <conio.h>
using namespace std;
 
class form
{
    protected:
        int x;
        int y;
        int len;
        int col; //öâåò
        int drt; //ïåðåäâèæåíèå - derectangle
    public:
        form();
        ~form();
        int _x() {return x;}
        int _y() {return y;}
        int _len() {return len;}
        int _drt() {return drt;}
        void x_(int x) {this->x=x;}
        void y_(int y) {this->y=y;}
        void len_(int len) {this->len=len;}
        virtual void move()=0;
        virtual void move(int)=0;
        virtual void draw()=0;
};
 
    form::form()
    {
        len=20+random(100);
        x=len+random(getmaxx()-2*len);
        y=len+random(getmaxy()-2*len);
        col=1+random(15);
    }
 
class line: public form
{
    public:
        line(): form()
        {
            x=len+random(20);
            drt=10;
        }
        void move()
        {
            x+=drt;
        }
        void draw()
        {
            setcolor(col);
            line(x-len/2,y,x+len/2,y);
        }
        
};
 
void main()
{
    randomize();
    getch();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2010, 22:05
Ответы с готовыми решениями:

Какой алгоритм и математическая модель у данной программы?
Парными простыми числами называют два простых числа, разность которых равна двум, например: 3 и 5;...

Простая модель ЭВМ фон Неймана
задача с классами (ввод данных, операции над ними) Программа должна содержать 2-3 метода в 2-3...

Математическая модель
Помогите составить матем. модель к задаче: написать программу, по длинам сторон распознающую среди...

Математическая модель
Помогите, пожалуйста, написать прогу в Паскале.Дана математическая модель работы механосборочного...

9
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 427
23.05.2010, 22:11  [ТС] 2
могу также предоставить пример программы подобной этой, чтобы понять суть того, что требуется.
(компилировать в TC или Borland C++ 3)
Вложения
Тип файла: rar ABSTRACT - 07-04-10.rar (918 байт, 48 просмотров)
0
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 427
23.05.2010, 22:45  [ТС] 3
я тут еще подумал: фактически данная линия - диаметр круга и она просто пробегает по кругу, хотя от этих знаний мне легче не стало...
0
40 / 40 / 6
Регистрация: 27.03.2010
Сообщений: 74
23.05.2010, 22:58 4
http://ru.wikipedia.org/wiki/Матрица_поворота
0
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 427
23.05.2010, 23:11  [ТС] 5
это немного не то, что мне нужно... мне нужны координаты... А это не совсем то, что я представлял - ведь линия рисуется ее координатами - целыми числами (т.к. значение пикселя не может быть дробным). Плюс ко всему нужно умножать как одну координату, так и другую. Я знаю, что они связаны между собой по законам синуса и косинуса, но вот как преобразовать их в линейные координаты... Если бы я знал - сюда бы не обращался...
0
40 / 40 / 6
Регистрация: 27.03.2010
Сообщений: 74
23.05.2010, 23:18 6
У Вас есть точка_до_вращения (x, y). Умножая матрицу вращений на координаты точки, получаете точку_после_вращения (x', y'). Округляете, выводите.

Вот вполне линейные координаты

x' = x*cos(alpha) - y*sin(alpha)
y' = x*sin(alpha) + y*cos(alpha)
1
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 427
23.05.2010, 23:34  [ТС] 7
т.е. будет нечто подобное?
line((x-len/2)*cos(d),-y*sin(d),(x+len/2)*cos(d),y*sin(d))

Добавлено через 7 минут
line(x1,y1,x2,y2);
x1`=(x-len/2)*cos(d)-y*sin(d)
y1`=(x-len/2)*sin(d)+y*cos(d)
x2`=(x+len/2)*cos(d)-y*sin(d)
y2`=(x+len/2)*sin(d)+y*cos(d)

вот - вроде так, для моего случая
0
40 / 40 / 6
Регистрация: 27.03.2010
Сообщений: 74
23.05.2010, 23:34 8
да. Такое преобразование нужно делать над каждой точкой которую будете вращать.
1
0 / 0 / 0
Регистрация: 28.09.2021
Сообщений: 10
15.11.2021, 12:58 9
Спустя 11 лет, можешь показать что у тебя получилось))))
0
анимешник++
95 / 62 / 7
Регистрация: 03.11.2009
Сообщений: 427
15.11.2021, 13:01  [ТС] 10
Так показал еще 11 лет назад:
line(x1,y1,x2,y2);
x1`=(x-len/2)*cos(d)-y*sin(d)
y1`=(x-len/2)*sin(d)+y*cos(d)
x2`=(x+len/2)*cos(d)-y*sin(d)
y2`=(x+len/2)*sin(d)+y*cos(d)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2021, 13:01

Математическая модель
Помогите с математической моделью Дана точка на плоскости с координатами (х, у).Составить...

математическая модель
помогите плиз математическая модель солнечной системы

Математическая модель
Постройте математическую модель игры в &quot;Спортлото&quot;. Составьте алгоритм для вычислителя помогающий...

Математическая модель ИК-пастеризатора.
Всем привет, может кто нибудь сделать программу в MathCad по готовой математической модели?...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.