C++ C++;跳高棒跳的正弦波公式

C++ C++;跳高棒跳的正弦波公式,c++,math,formula,trigonometry,wave,C++,Math,Formula,Trigonometry,Wave,我需要创建一个pogo棒,它以弧形在屏幕上跳跃。我在想最好的办法是用正弦波移动它。如果波的顶部为1,地面为0,波的底部为-1,那么每次它达到0,我都会重置这些值以再次启动正弦波。因此,它不是跟随典型的正弦波(0,1,0,-1,0等),而是走0,1,0,1,0等 不幸的是,我的数学很糟糕,我已经花了好几个小时试图推导出一个公式。目前,我只是想做一个正常的正弦波,上半部分模拟一个波戈棍子跳跃,似乎都走不了那么远。最接近我的是: m_vel.x++; float f = PI / 30 / 2; m_

我需要创建一个pogo棒,它以弧形在屏幕上跳跃。我在想最好的办法是用正弦波移动它。如果波的顶部为1,地面为0,波的底部为-1,那么每次它达到0,我都会重置这些值以再次启动正弦波。因此,它不是跟随典型的正弦波(0,1,0,-1,0等),而是走0,1,0,1,0等

不幸的是,我的数学很糟糕,我已经花了好几个小时试图推导出一个公式。目前,我只是想做一个正常的正弦波,上半部分模拟一个波戈棍子跳跃,似乎都走不了那么远。最接近我的是:

m_vel.x++;
float f = PI / 30 / 2;
m_vel.y = 200 * sin(f * m_vel.x);
m_vel.y = -m_vel.y;

我需要波浪很窄,高点很高。上面的公式在第一次迭代开始时是正确的,但随后波浪变得更宽,高点和低点彼此靠近。有人能帮数学难题解决吗?

只要取一个正弦波的绝对值。 所以负的部分变成正的

float f = abs( sin( <input here> ) );
float f=abs(sin());

只需取正弦波的绝对值即可。 所以负的部分变成正的

float f = abs( sin( <input here> ) );
float f=abs(sin());

哈默利特有票:

double a = 100.0; // amplitude controls the height
double f = 10.0;  // frequency controls the width
double t = 0.0;   // time is the independent variable.
abs(a*sin(2.0*PI*f*t)) 

不要忘了正弦函数需要弧度,因此作为参数传入的值必须使用正确的单位。

Hammerite有以下条件:

double a = 100.0; // amplitude controls the height
double f = 10.0;  // frequency controls the width
double t = 0.0;   // time is the independent variable.
abs(a*sin(2.0*PI*f*t)) 

不要忘记正弦函数需要弧度,因此作为参数传入的值必须使用正确的单位。

不确定你的数学,你的物理需要复习一下!pogo杆是一个示例,其轨迹形成a,由a描述

但是,您是否应该坚持使用不正确的正弦模型:正弦波的“上半部分”(或正)从0到π弧度。正弦仅表示y项(高度),不应该有x项,它只确定每个点的水平步长。如果有200,则表示pogo斗杆将达到的最大高度:

height = max_height * sin( theta ) ;

如果你对你的数学不确定,你的物理需要复习一下!pogo杆是一个示例,其轨迹形成a,由a描述

但是,您是否应该坚持使用不正确的正弦模型:正弦波的“上半部分”(或正)从0到π弧度。正弦仅表示y项(高度),不应该有x项,它只确定每个点的水平步长。如果有200,则表示pogo斗杆将达到的最大高度:

height = max_height * sin( theta ) ;

其中0这是一个新编写的参数代码,适用于正弦波和抛物线波

#define _USE_MATH_DEFINES // need this to get M_PI defined under VS2008
#include <math.h>
#define(定义)使用(数学)定义//
#包括
[……]

//用户参数
浮动屏幕宽度=640.0f;
每个屏幕的浮动循环数=2.0f;
浮动最小波浪值=0.0f;
浮动最大波浪值=1.0f;
//窦波特性
浮动半波振幅=0.5f*(最大波值-最小波值);
浮动偏移=半波振幅+最小波值;
浮点数f0=2.0f*M\u PI*每个屏幕/屏幕宽度的循环次数;
//计算整个屏幕宽度上的窦波

对于(float x=0.0f;x,这里是最新编写的用于正弦波和抛物线波的参数化代码

#define _USE_MATH_DEFINES // need this to get M_PI defined under VS2008
#include <math.h>
#define(定义)使用(数学)定义//
#包括
[……]

//用户参数
浮动屏幕宽度=640.0f;
每个屏幕的浮动循环数=2.0f;
浮动最小波浪值=0.0f;
浮动最大波浪值=1.0f;
//窦波特性
浮动半波振幅=0.5f*(最大波值-最小波值);
浮动偏移=半波振幅+最小波值;
浮点数f0=2.0f*M\u PI*每个屏幕/屏幕宽度的循环次数;
//计算整个屏幕宽度上的窦波

对于(xx= 0.0f;xu可能要考虑a),因为这是实际发生的。如果你只想得到正负峰被正峰取代的正弦波,你可以使用绝对值函数,如<代码> abs(Sin(…))。
。但是,从你问题的第二部分开始,我不确定这是否是你真正想要的。我建议你尝试Cliffords answer,因为如果你一步一步地做,它有一个非常简单的实现。只需跟踪位置速度和重力。对于每一步,你都要将x和y速度添加到x和y位置+添加gra如果你只想得到正负峰的正弦波替换正负峰,你可以使用绝对值函数,如<代码> ABS(Sin(…))。
。但是,从你问题的第二部分开始,我不确定这是否是你真正想要的。我建议你尝试Cliffords answer,因为如果你一步一步地做,它有一个非常简单的实现。只需跟踪位置速度和重力。对于每一步,你都要将x和y速度添加到x和y位置+添加gra当y-velocity触地时,你只需在y-velocity上改变符号,如果(y抱歉,我在这里写Java。对不起,我在这里写Java。