【问题标题】:How to find evenly distributed points on a line?如何在一条线上找到均匀分布的点?
【发布时间】:2012-11-05 03:49:27
【问题描述】:

这是为了找到位于特定线上的均匀分布的点(从起始位置,线上的 2 个点,以及与水平线成一个角度),然后经过第二个点,绘制一些东西,使其以给定方向的固定利率。

我正在考虑计算一个斜率,这将使我从垂直运动变为水平运动。但是,我什至不知道如何确保它们在两条不同的生产线上具有相同的速度。例如,如果有两对不同的点,绘图在两者上移动相同的距离需要相同的时间。

我描述的是正确的想法吗? OpenGL中有什么方法可以帮助我吗?

【问题讨论】:

    标签: java line point


    【解决方案1】:

    你应该使用向量。从一个点开始,沿着向量的方向行进。例如:

    typedef struct vec2 {
        float x;
        float y;
    } vec2;
    

    这定义了一个基本的 2D 矢量类型。 (这将适用于 3D,只需添加 z 坐标。)

    要在给定方向上移动固定距离,只需取一些起点并添加按标量缩放的方向矢量。像这样:

    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 将在someDirection 的方向上有 5 个单位。请注意,您可能希望在以这种方式使用它之前对 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;
    }
    

    【讨论】:

    • 我不明白,什么是'typedef struct'? C中的东西?我很确定在 Java 中没有与此等价的东西。
    • 是的。关键是它有 x 和 y 的 2 个浮点值。你可以把它变成一个类,或者任何在 Java 中合适的东西。我认为sqrt 会类似于Math.sqrt。我有一段时间没学过Java了,但数学还是可以的。
    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多