这是为了找到位于特定线上的均匀分布的点(从起始位置,线上的 2 个点,以及与水平线的角度),然后经过第二个点,绘制一些东西,使其以固定的速率移动给定的方向。
我正在考虑计算一个斜率,这将使我垂直移动到水平移动。但是,我什至不知道如何确保它们在两条不同的生产线上具有相同的速度。例如,如果有两对不同的点,绘图在两者上移动相同的距离需要相同的时间。
我描述的是正确的想法吗?OpenGL中有什么方法可以帮助我吗?
你应该使用向量。从一个点开始,沿着向量的方向行进。例如:
typedef struct vec2 {
float x;
float y;
} vec2;
这定义了一个基本的 2D 矢量类型。(这将在 3D 中工作,只需添加 az coord。)
要在给定方向上移动固定距离,只需取一些起点并添加按标量缩放的方向矢量。像这样:
typedef struct point2D {
float x;
float y;
} point2D; //Notice any similarities here?
point2D somePoint = { someX, someY };
vec2 someDirection = { someDirectionX, someDirectionY };
float someScale = 5.0;
point2D newPoint;
newPoint.x = somePoint.x + someScale * someDirection.x;
newPoint.y = somePoint.y + someScale * someDirection.y;
将newPoint
是 5 个单位的方向someDirection
。请注意,您可能希望someDirection
在以这种方式使用它之前进行标准化,因此它的长度为 1.0:
void normalize (vec2* vec)
{
float mag = sqrt(vec->x * vec->x + vec->y * vec->y);
// TODO: Deal with mag being 0
vec->x /= mag;
vec->y /= mag;
}