Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
#1

простая математическая модель вращения - C++

23.05.2010, 22:05. Просмотров 1280. Ответов 7

Есть линия длинной 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2010, 22:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос простая математическая модель вращения (C++):

Какой алгоритм и математическая модель у данной программы? - C++
Парными простыми числами называют два простых числа, разность которых равна двум, например: 3 и 5; 17 и 19. Напишите программу нахождения n...

Программа на C++, которая переводит цветовую модель RGB в модель HSV - C++
Всем привет! Я - начинающий программист. Мне нужна ваша помощь. Мне нужно сделать программу на C++, которая переводит цветовую модель RGB в...

Математическая задача - C++
Добрый вечер! Снова прошу у вас помощи с программой. Выдает ошибку при запуске. И ещё её нужно переделать, для работы через функции, у меня...

Математическая формулировка - C++
Доброго времени дня всем. У меня возникла проблема. Значит сделал я программу по следующему условию: И теперь стоит вопрос в...

Математическая задача - C++
Сумма 1+\sum_{n=1}^{\propto}\frac{{3}^{n}\prod_{i=1}^{n}(2i-1)}{\prod_{j=1}^{n}2j} Промежуток (-0.5;0.5) Шаг - 0.02 Функция...

Математическая задача в С++ - C++
мат Задача помогите решить в С++ : s=cos(x) + (cos(x))/2 + ... + (cos(x)*n)/n^2 ; 0.2&lt;=X&lt;=0.8 ; n(max)= 20 ; х идет с шагом 0,1 ,а...

7
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
23.05.2010, 22:11  [ТС] #2
могу также предоставить пример программы подобной этой, чтобы понять суть того, что требуется.
(компилировать в TC или Borland C++ 3)
0
Вложения
Тип файла: rar ABSTRACT - 07-04-10.rar (918 байт, 39 просмотров)
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
23.05.2010, 22:45  [ТС] #3
я тут еще подумал: фактически данная линия - диаметр круга и она просто пробегает по кругу, хотя от этих знаний мне легче не стало...
0
arcture
39 / 39 / 1
Регистрация: 27.03.2010
Сообщений: 74
23.05.2010, 22:58 #4
http://ru.wikipedia.org/wiki/Матрица_поворота
0
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
23.05.2010, 23:11  [ТС] #5
Цитата Сообщение от arcture Посмотреть сообщение
http://ru.wikipedia.org/wiki/Матрица_поворота
это немного не то, что мне нужно... мне нужны координаты... А это не совсем то, что я представлял - ведь линия рисуется ее координатами - целыми числами (т.к. значение пикселя не может быть дробным). Плюс ко всему нужно умножать как одну координату, так и другую. Я знаю, что они связаны между собой по законам синуса и косинуса, но вот как преобразовать их в линейные координаты... Если бы я знал - сюда бы не обращался...
0
arcture
39 / 39 / 1
Регистрация: 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
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
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
arcture
39 / 39 / 1
Регистрация: 27.03.2010
Сообщений: 74
23.05.2010, 23:34 #8
да. Такое преобразование нужно делать над каждой точкой которую будете вращать.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2010, 23:34
Привет! Вот еще темы с ответами:

Математическая функция - C++
Составить программу вычисления значения выражения: 1/3 +2 модуль(cos(x-Pi/6)) #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

Математическая константа Е - C++
Привет всем:) У меня трудности с математикой.Нужно вычислить константу Е по формуле &quot; е = 1 + 1/!1 + 1/!2 + 1/!3 и ...... Заранее спасибо:)...

Математическая задача на C++ - C++
И снова я. Пожалуйста помогите переделать программу на нужную. Суть задачи такова: С клавиатуры вводится радиус окружности с...

Математическая задачка - C++
В качестве f(x) использовать по выбору: sin(x), х , ех


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
23.05.2010, 23:34
Ответ Создать тему
Опции темы

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