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

Баг в алгоритме поворота точек - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ пересечения прямой и гиперболы http://www.cyberforum.ru/cpp-beginners/thread1064407.html
С клавиатуры задаются коэффициенты, определяющие прямую на плоскости. Найти координаты точек пересечения этой прямой с гиперболой и сформировать из них множество А. Вот задание помогите алгоритмом или кодом, пожалуйста. А то никак не могу придумать что-то. Спасибо.
C++ работа с текстовым документом дано 3 файла .txt 1.txt здесь некие данные 2.txt и здесь 3.txt здесь пусто нужна такая программа что бы она сравнила 1 и 2 файл ,нашла совпадения и записала в 3 файл. помогите пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1064397.html
Работа с Fstream C++
Нужна программа которая выводит элементы записанные в файле в консоль. Прикол в том что нужно это сделать без указания количества элементов в файле. Я написал код, но проблема в том, что после подсчета количества элементов, обьект fin не хочет выводить данные, которые записанны в файл, а выводит "мусорные" значения. Помогите как это исправить? #include <iostream> #include <fstream> using...
Как осуществить корректное конструирование объекта и отправить его на вывод? C++
Условия задачи: Комплексное число состоит из двух частей — вещественной и мнимой. Один из способов записи такого числа выглядит как (3.0, 4.0). Здесь 3.0 — вещественная часть, а 4 .0 — мнимая. Предположим, что а = (А, Ві) и с = (С, Di). Ниже представлены некоторые операции с комплексными числами: • сложение: а + с = (А + С, (В + D)i) • вычитание: а - с = (А - С, (В - D)i) • умножение: а*с...
C++ создать библиотеку из 5 функций: сложение, вычетание, деление, умножение и выделение корня http://www.cyberforum.ru/cpp-beginners/thread1064349.html
Нужно срочно сделать курсовую работу, а код написать не могу , как бы ни старался :( задача: создать библиотеку из 5 функций: сложение, вычетание, деление, умножение и выделение корня. мне препод что-то написал, но ума у меня особо не хватает все это в кучу собрать, помогите чем сможете пожалуйста :) func1.h void func1(int, &double); void func2(&double); ... func1.cpp void func1(int a,...
C++ Найти количество положительных элементов расположенных ниже главной диагонали матрицы Найти количество положительных элементов расположенных ниже главной диагонали матрицы, с++ подробнее

Показать сообщение отдельно
Алексей_x86
 Аватар для Алексей_x86
1 / 1 / 0
Регистрация: 17.01.2013
Сообщений: 21
07.01.2014, 15:01  [ТС]     Баг в алгоритме поворота точек
Вот более полный код :
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
/*
Конструктор класса. Определение опорных точек и точки поворота.
*/
 
int astHeight = genSeed+2;
int astWidth  = genSeed+6;
 
//-->Опорные точки
sPoint2D leftHeadPoint  = {_myPos.x             , _myPos.y+(astHeight/2) };
sPoint2D upHeadPoint    = {_myPos.x+(astWidth/2), _myPos.y               };
sPoint2D rightHeadPoint = {_myPos.x+astWidth    , _myPos.y+(astHeight/2) };
sPoint2D downHeadPoint  = {_myPos.x+(astWidth/2), _myPos.y+astHeight     };
 
_myModel.push_back(leftHeadPoint);
_myModel.push_back(upHeadPoint);
_myModel.push_back(rightHeadPoint);
_myModel.push_back(downHeadPoint);
 
//-->Подсчет координаты точки , относительно которой будет поворот
int xC = 0;
int yC = 0;
        
for(unsigned short i = 0; i < _myModel.size(); i++){
    xC+=_myModel[i].x;
    yC+=_myModel[i].y;
};
 
_myCenter.x = xC/_myModel.size()-1;
_myCenter.y = yC/_myModel.size()-1;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
/*
Метод поворота
*/
 
_myAngleDeg+=(3.14/180);
 
for(unsigned short i = 0; i <= _myModel.size()-1; i++){
int oldX = _myModel[i].x;
int oldY = _myModel[i].y;
 
_myModel[i].x  = _myCenter.x + (oldX - _myCenter.x) * cos(_myAngleDeg) - (oldY - _myCenter.y) * sin(_myAngleDeg);
_myModel[i].y  = _myCenter.y + (oldY - _myCenter.y) * cos(_myAngleDeg) + (oldX - _myCenter.x) * sin(_myAngleDeg);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
Код отрисовки (GDI+)
*/
void OnPaint(...){
...
 
    sPoint2D startPos = {200 , 200};
 
    static cAteroid a1 = cAteroid(... startPos ...);
    a1.tRotate();
 
    vector<sPoint2D> vec = *a1.getModel();
 
    for(unsigned short i = 0; i <= vec.size()-2; i++){
            g.DrawLine(p , vec[i].x , vec[i].y , vec[i+1].x , vec[i+1].y);
            //-->Отрезок из точки конца в начальную точку
            if(i == vec.size()-2){
            g.DrawLine(p , vec[i+1].x , vec[i+1].y , vec[0].x , vec[0].y);
            }
    };
...
}
Ладно с ней , точкой относительно которой идет поворот. Не могу понять почему деформируется тело при повороте (причем с разным шагом угла , разная деформация).
Данный код дает уже гораздо лучший результат , почти так , как надо , однако деформация.

Добавлено через 16 минут
Фух...
Нашел баг.
Оказывается деформация была из-за того , что координаты точек (и не только они) хранились как int , а не как double. Т.е. терялась дробная часть числа.
Всем спасибо , что помогали решить проблему.
Ответ нашел здесь :
http://dxdy.ru/topic68567.html
В следующий раз буду внимательней Google'ом пользоватся.
 
Текущее время: 09:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru