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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 5.00
Exeil
 Аватар для Exeil
5 / 5 / 1
Регистрация: 06.12.2010
Сообщений: 50
02.10.2011, 13:19     Поворот фигуры #1
Всем привет, нужна ваша помощь:
Я сделал функцию для поворота фигуры, но после многократного применения фигура трансформируется, уменьшается и за 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;
    }
}
Буду благодарен любой помощи.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2011, 13:19     Поворот фигуры
Посмотрите здесь:

C++ поворот на 90...
C++ Вводить название фигуры, выводить формулу для вычисления площади этой фигуры
Поворот матрицы C++
C++ Поворот фигуры
C++ Поворот фигуры в игре тетрис.
C++ Поворот массива на 45%
C++ Программа вычисления местонахождения точки относительно фигуры (лежит ли точка внутри, на контуре или вне фигуры)
Поворот фигуры на заданный угол C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 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 )
Exeil
 Аватар для 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 минуту
проблему решил, пришлось хранить оригинал и каждый раз его копировать в данный и крутить.
Yandex
Объявления
02.10.2011, 14:52     Поворот фигуры
Ответ Создать тему
Опции темы

Текущее время: 01:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru