【问题标题】:2D Projectile - Updating my x and y values?2D Projectile - 更新我的 x 和 y 值?
【发布时间】:2017-01-07 10:52:12
【问题描述】:

我正在构建一个小型物理引擎,它以给定的角度和速度发射弹丸,并在每个时间间隔跟踪和显示速度/位置矢量。目前,我的仓位值vars.posNew 似乎正在更新,但我的vars.xvars.y 值无法更新。

这是我的代码:

#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() {

    float deltaT = 0.01;

    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);   // <-- I'm going wrong somewhere here
        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();
    }
}

我知道vars.xvars.y 中的值是常量值,这让我简单地认为我应用了错误的公式来计算这些值,或者我只是遗漏了一件事?

【问题讨论】:

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


    【解决方案1】:

    那么 vars.x 和 vars.y 是使用永远不会改变的 vars.u 计算的。尝试使用 v(如果我理解正确,则使用新速度):

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

    我认为您想使用 v 而不是 u,因为 v 是新速度。不确定 vars.theta,它应该随着时间而改变吗?第一次计算 vars.x 和 vars.y 是否正确,它是用新的速度完成的,还是应该在第一次运行时用起始值完成。也许考虑再添加一个变量,这样您就可以存储之前运行的值。如果我的答案很纠结,请告诉我;)

    【讨论】:

    • 啊,甚至没有看到 v 是使用 v = u + at 计算的。我觉得这很合适。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2017-02-05
    • 2020-07-17
    • 2013-04-22
    • 1970-01-01
    相关资源
    最近更新 更多