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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 5.00
Exeil
5 / 5 / 1
Регистрация: 06.12.2010
Сообщений: 50
#1

Поворот фигуры - C++

02.10.2011, 13:19. Просмотров 2913. Ответов 2
Метки нет (Все метки)

Всем привет, нужна ваша помощь:
Я сделал функцию для поворота фигуры, но после многократного применения фигура трансформируется, уменьшается и за 10-20 применений исчезает. Возможно дело в потере точности

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
/*
        p[0].x = 50; p[0].y = 50;
        p[1].x = 50; p[1].y = 150;
        p[2].x =  150; p[2].y = 150;
        p[3].x =  150; p[3].y = 50;
        p[4].x = 50; p[4].y = 50;
 
        RotateVertex(p, 100, PI/3, 5);
        p[4].x = p[0].x; p[4].y = p[0].y;
*/
 
void RotateVertex(POINT *point, int size, float angle, int n) //angle - угол
{
    int i, x, y, dx, dy, radius;
    float point_angel;
 
    ////функция для нахождения центра фигуры
    POINT middle = CenterVertex(point, n); 
 
 
    for(i = 0; i < n; i++)
    {
        //центруем фигуру
        x = point[i].x - middle.x;
        y = point[i].y - middle.y;
 
        //находим радиус вектора в данную точку
        radius = sqrt((float) x*x + y*y);
        //находим угол между вектором и вектором i
        point_angel = acosf((float) x / radius);
 
        //т.к. в формуле нахождения угла между единичным вектором i и вектором  в точку 
        //пришлось менять знак самостоятельно
        if(y > 0) point_angel = -point_angel; 
 
 
        dx =   (float) radius * cosf(angle + point_angel);
        dy = -((float) radius * sinf(angle + point_angel));
 
        //пишем результат и возвращаем координатную ось
        point[i].x = dx + middle.x;
        point[i].y = dy + middle.y;
    }
}
Буду благодарен любой помощи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2011, 13:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поворот фигуры (C++):

Поворот фигуры - C++
Добрый день. Необходима программа на С++ поворота треугольника вокруг заданной точки. То есть, что бы в начале предлагалось ввести...

Поворот фигуры по часовой стрелке - C++
Помогите вывести формулу для поворота фигуры на произвольный угол. У меня выходит одно уравнение с двумя неизвестными.

Поворот фигуры на заданный угол - C++
Добрый день. Простая задача - поворот фигуры, задаётся некоторый угол &quot;фи&quot;. Поворот относительно вершины A срабатывает нормально,...

Поворот фигуры в игре тетрис. - C++
Здравствуйте, пытаюсь написать тетрис, но вот не знаю как крутить фигуры, можете чем то помочь? Слышал про матрицу поворотов только не...

Вводить название фигуры, выводить формулу для вычисления площади этой фигуры - C++
Вводить название фигуры (треугольник, квадрат, ромб, прямоугольник) выводить формулу для вычисления площади этой фигуры.

Программа вычисления местонахождения точки относительно фигуры (лежит ли точка внутри, на контуре или вне фигуры) - C++
Нужно написать программу вычисления местонахождения точки относительно фигуры(лежит ли данная точка внутри неё, на контуре или вне фигуры)....

2
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.10.2011, 13:41 #2
поворот точки (х, y) на угол альфа с центром фигуры в (0, 0)
http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{'}=x*cos(\alpha ) - y * sin(\alpha )
http://www.cyberforum.ru/cgi-bin/latex.cgi?{y}^{'}=x*sin(\alpha ) + y * cos(\alpha )
1
Exeil
5 / 5 / 1
Регистрация: 06.12.2010
Сообщений: 50
02.10.2011, 14:52  [ТС] #3
Цитата Сообщение от Jupiter Посмотреть сообщение
поворот точки (х, y) на угол альфа с центром фигуры в (0, 0)
http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{'}=x*cos(\alpha ) - y * sin(\alpha )
http://www.cyberforum.ru/cgi-bin/latex.cgi?{y}^{'}=x*sin(\alpha ) + y * cos(\alpha )
проблема осталась, а эти формулы почему то не подходят для меня, фигура трансформируется в нечто не похожее на прямоугольник

Добавлено через 41 минуту
проблему решил, пришлось хранить оригинал и каждый раз его копировать в данный и крутить.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2011, 14:52
Привет! Вот еще темы с ответами:

поворот на 90... - C++
Хочу повернуть матрицу по часовой стрелке на 90 градусов, но че-то не получается... Помогите найти ошибку... Вот мой код: #include...

поворот массива на 90° - C++
всем привет. помогите разобраться с одной простенькой задачкой. есть массив. сделал зеркальный поворот массива, но теперь нужно...

Поворот матрицы - C++
Содержимое матрицы размерности n x n повернуть на 90 градусов по часовой стрелке вокруг центра симметрии матрицы. Исходная матрица...

Поворот матрицы - C++
Нужно повернуть квадратную матрицу на 180 градусов. У меня не поворачиваются все елементы кроме двух... ...


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

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

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