c++ - 2D 射弹 - 速度和位置 vector

标签 c++ vector visual-studio-2015 physics

我正在构建一个小型物理引擎,以给定的角度和速度发射射弹,并在每个时间间隔跟踪和显示速度/位置 vector ,但我的程序遇到了一些问题。

当我运行我的程序时,它没有循环,并且 position 变量保持为 0。我知道我在某处数学错误,只是不知道在哪里。

这是我的程序:

#include <iostream>

using namespace std;

#define PI 3.14159265359

struct vecVariables {

    float v = 0, a = -9.81;
    float posNew = 0, posOld = 0;
    float x, y;
    float theta = 45;   // our start angle is 45
    float u = 20;       // our start velocity is 20
};

int main() {

    int deltaT = 0.01;
    int test;

    vecVariables vars;      // creates an object for Variables to be used

    while (deltaT <= 1) {

        deltaT += 0.01;

        vars.v = vars.u + vars.a * deltaT;  // gets the velocity V
        vars.posNew = vars.posOld + vars.v * deltaT;    // gets position D

        vars.x = vars.u * cos(vars.theta *  PI / 180);
        vars.y = vars.u * sin(vars.theta*  PI / 180);

        cout << "velocity vec = [" << vars.x << " , " << vars.y << "]" << endl;  // velocity on x, y

        cout << "pos = "<< vars.posNew << endl;  // display position

        vars.posOld = vars.posNew; 

        getchar();
    }
}

最佳答案

int deltaT = 0.01; 更改为 float deltaT = 0.01f;double deltaT = 0.01;。发生的事情是您的“.01”在转换为整数时被截断了。你想要一个 floatdouble 因为它们告诉编译器期望一个非整数值。现在,您告诉它需要一个整数值,因为它没有得到一个整数,所以它会删除小数点后的所有内容以强制它成为一个整数。

关于c++ - 2D 射弹 - 速度和位置 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516461/

相关文章:

c++ - 在 C++ 中写入 stderr 时调用函数?

c++ - g++ 编译错误

c++ - 排序函数中的段错误

c++ - 如何释放 C++ 内存 vector<int> * arr?

VS2015 中的 Azure 调试环境启动时崩溃

c# - 如何在 Visual Studio 中使用 Razor 网页设置数据库并连接到它?

c++-cli - VS2015 C++/CLI Release Build 中的 NullReferenceException

c++ - GCC 汇编代码生成错误和解决方法

c++ - 从哪里获得简单的 Boost 线程管理示例?

c++ - 没有运算符 "="匹配这些操作数