C++ 为什么不是';我的pictureBox是否正在移动(Visual C+;+;)?

C++ 为什么不是';我的pictureBox是否正在移动(Visual C+;+;)?,c++,controls,picturebox,trigonometry,C++,Controls,Picturebox,Trigonometry,我正在制定一个基本的两体问题计划的早期阶段(对于那些不知道的人来说,“两体问题”是指空间中的两个物体相互引力吸引)。我已经设置好了它,这样在每个定时器上,对象(图片框)都会按照输入到文本框中的方向(以度为单位)移动 一旦两个IF语句确保文本框中的值有效,它们将在按钮按下事件中执行此操作(按钮将启动模拟): 在timer_tick事件中: this->Object1->Location.X+=(int::Parse(VelocityBox1->Text)*cos(radians1

我正在制定一个基本的两体问题计划的早期阶段(对于那些不知道的人来说,“两体问题”是指空间中的两个物体相互引力吸引)。我已经设置好了它,这样在每个定时器上,对象(图片框)都会按照输入到文本框中的方向(以度为单位)移动

一旦两个IF语句确保文本框中的值有效,它们将在按钮按下事件中执行此操作(按钮将启动模拟):

在timer_tick事件中:

this->Object1->Location.X+=(int::Parse(VelocityBox1->Text)*cos(radians1));
this->Object1->Location.Y+=(int::Parse(VelocityBox1->Text)*sin(radians1));
this->StartStop->Text=(radians1.ToString());  //This is just here to check that the math was correct, which it is

我还没有编码C++,所以这可能是一个非常简单的错误,但是有人有任何想法,或者需要粘贴更多代码吗?

< P>除了正确更新位置属性以获得新的值外,你可能想把一个临时的XY作为一个浮点,这样你就可以给它添加分数值。
typedef struct { float x, y ; } floatcoord ;

floatcoord  tmpLocation ;
tmpLocation.x += int::Parse(VelocityBox1->Text)*cos(radians1) ;
tmpLocation.y += int::Parse(VelocityBox1->Text)*sin(radians1) ;

this->Object1->Location.set( (int) floorf( tmpLocation.x), (int) floorf( tmpLocation.y) ;  // or however you update Location

什么数据类型是Location.X和Location.Y?如果它们是整数,那么您可能只是遇到了舍入问题。@woolstar我假设它们是整数。为什么取整问题会导致这样的问题呢?我通常输入1表示速度,输入90表示方向。90变成了1.57,它会被截断成1,所以它仍然会移动,对吗?cos()和sin()永远不会大于1,所以如果速度只有1,那么在45度时,你只能得到0.7和0.7,它会被截断成零。尝试10的速度,看看是否有结果。@woolstar仍然没有10的速度,或者1000的速度。我会确认
int::Parse(VelocityBox1->Text)
下一步返回的是一个有效的数字。
typedef struct { float x, y ; } floatcoord ;

floatcoord  tmpLocation ;
tmpLocation.x += int::Parse(VelocityBox1->Text)*cos(radians1) ;
tmpLocation.y += int::Parse(VelocityBox1->Text)*sin(radians1) ;

this->Object1->Location.set( (int) floorf( tmpLocation.x), (int) floorf( tmpLocation.y) ;  // or however you update Location