我正在尝试用C ++计算精灵的移动角度。
虽然目前我只是使用控制台输出结果。
我的问题是,当我的结果显示在控制台中时,我无法让x轴进入负号。
不幸的是,我刚刚学会了基本的触发,所以我不知道我是不是只是把数学做错了。
例如:如果我选择我的角度为270而我的速度为1,则当我认为它应该是(-1,0)时控制台将新坐标显示为(1,-1)
同样,如果我将角度设为-90,速度设为1,则得到(0,-1)
只是x不能进入负数吗?
或者我犯了一个根本性的错误?
我的代码如下 - 所以,如果有人能指出我做错了什么,我们将不胜感激。
#include <iostream>
#include <cmath>
using namespace std;
const float PI = 3.14159265;
class sprite {
public:
int x;
int y;
int angle;
int speed;
sprite();
};
sprite::sprite() {
x = 0;
y = 0;
angle = 0;
speed = 0;
}
int main() {
int userInput = 0;
sprite mySprite;
cout << "Starting co-ordinates: (" << mySprite.x << "," << mySprite.y << ")\n\n";
while(userInput != 999) {
cout << "Angle to move: ";
cin >> userInput;
mySprite.angle = userInput;
cout << "Speed to move at: ";
cin >> userInput;
mySprite.speed = userInput;
mySprite.x += ceil(cos(mySprite.angle*PI/180)*mySprite.speed);
mySprite.y += ceil(sin(mySprite.angle*PI/180)*mySprite.speed);
cout << "\n\n";
cout << "New co-ordinates: (" << mySprite.x << "," << mySprite.y << ")\n\n";
}
return 0;
}
答案 0 :(得分:3)
更改为:
mySprite.x += floor(cos(mySprite.angle*PI/180)*mySprite.speed + 0.5);
mySprite.y += floor(sin(mySprite.angle*PI/180)*mySprite.speed + 0.5);
阅读this(或您喜欢的任何其他指南)以了解原因。
答案 1 :(得分:1)
首先,你应该期待的答案是(0,-1),而不是(-1,0)(0是对,90是向上,180是剩下,270是向下)。得到(1,-1)的原因是因为浮点的限制意味着你的cos
和sin
结果是(1e-8,-1)。然后你取这些ceil
,它们是(1,-1)。你可能想要围绕而不是采取上限。