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

Вращение координаты вокруг точки - C++

Восстановить пароль Регистрация
 
Lorise
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 19
01.08.2015, 07:56     Вращение координаты вокруг точки #1
на входе x, y координаты точки которую нужно вращать и x, y координаты точки во круг которой происходит вращение, также есть угол в градусах ( диапазон от -180* до 180* )
есть форма 300 на 300

нужно чтобы точка во круг которой происходит вращение находилась в центре формы ( 150, 150 ), а остальные точки вращались относительно нее

получаю точку во круг которой нужно вращать( диапазан от -2000 до 2000 )
class MyPlayer
C++
1
2
_x = _processRw.Read( addressX, sizeof( float ) ).ToFloat();
_y = _processRw.Read( addressY, sizeof( float ) ).ToFloat();
получаю точку которую нужно вращать( диапазан от -2000 до 2000 )
class Player
C++
1
2
_x = _processRw.Read( addressPlayer + Addresses.OffsetX, sizeof( float ) ).ToFloat();
_y = _processRw.Read( addressPlayer + Addresses.OffsetY, sizeof( float ) ).ToFloat();
получаю смещение от точки во круг которой происходит вращение до центра
C++
1
2
float offsetX = playersStatistics.MyPlayer.X - Width / 2 * _zoom;
float offsetY = playersStatistics.MyPlayer.Y - Height / 2 * _zoom;
преобразую угол в радианы 0 - 6,28
C++
1
2
3
_yaw = _processRw.Read( addressYaw, sizeof( float ) ).ToFloat();
_yaw += 180;
_yaw = ( float )( Math.PI / 180F * _yaw );
тут вращаю координату вокруг точки и рисую
C++
1
2
3
4
5
6
7
8
9
10
float playerX = ( float )( playersStatistics.MyPlayer.X + ( player.X - playersStatistics.MyPlayer.X ) * Math.Cos( playersStatistics.MyPlayer.Yaw ) - ( player.Y - playersStatistics.MyPlayer.Y ) * Math.Sin( playersStatistics.MyPlayer.Yaw ) );
float playerY = ( float )( playersStatistics.MyPlayer.Y + ( player.Y - playersStatistics.MyPlayer.Y ) * Math.Cos( playersStatistics.MyPlayer.Yaw ) + ( player.X - playersStatistics.MyPlayer.X ) * Math.Sin( playersStatistics.MyPlayer.Yaw ) );
 
playerX -= offsetX;
playerY -= offsetY;
 
playerX /= _zoom;
playerY /= _zoom;
 
g.DrawRectangle( new Pen( Color.Red ), playerX - 2, playerY - 2, 4, 4 );
_zoom ( диапазон от 1 - до 100 ) для увеличения/уменьшения видимости

в общем все вращается как надо, но есть инверсия т.е. если координата перемещается влево, на форме показывается что перемещается вправо и по y также
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2015, 07:56     Вращение координаты вокруг точки
Посмотрите здесь:

Осуществить "вращение" квадрата вокруг его центра C++
Вращение прямоугольника вокруг оси C++
C++ Даны координаты вершин треугольника и координаты некоторой точки внутри него
C++ Вращение объекта вокруг оси. Матрицы поворота.
Как найти координаты точки на прямой удаленной от заданной точки на х C++
C++ Вращение окружностей вокруг определенного центра
Вращение кубика вокруг начала координат C++
Заданы координаты точки подвеса математического маятника A(xa, ya, za) и координаты одной из точек его наивысшего подъема B(xb, yb, zb). Найти координ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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