2015-05-25 2 views
2

Это то, что очень раздражало. В XNA/Monogame SpriteBatch.Draw использует либо Vector2 для позиции, либо Rectangle для позиции. Vector2 принимает значения float, а Rectangles - только ints.самый точный тип данных для позиционирования

Мне нужно использовать поплавки/парные, потому что они поддерживают плавное перемещение изображений по экрану. Однако я заметил определенные математические ошибки при выполнении действий, которые требуют косинуса и синуса, усечения или любой из функций преобразования математики.

Возьмите эту формулу, например:

for(int i = 0; i < 8; i++) 
{ 

creategraphic(320+64*cos(360/8*i),240*+64*sin(360/8*i)); 

} 

Это должно создать 8 текстур, на окружности с радиусом 64, и равномерно распределены. Результат, однако, нигде не близок. Я получаю значения, у которых есть нерестилища предметов под тем же углом или что-то еще хуже.

Итак, для позиционирования наилучший способ справиться с этим при работе со сложными математическими расчетами и сохранить точность?

+0

Вы должны заменить '360' на' 360.0f' для начала. – Aybe

+0

Я пробовал это, но углы по-прежнему неправы. Никаких заметных изменений. http://s9.postimg.org/4jyrylmsv/Screenshot_70.png изображение того, что я получаю, даже после добавления .0f к 360 –

+0

sin/cos обычно принимают радианы (не такие степени, как в вашем коде). Не уверен, какой язык/библиотека вы используете, поэтому не знаете, применимо ли оно. –

ответ

Смежные вопросы