我来翻过这样的: T =夹(吨/ d,0,1)  但我不知道如何在一个向量执行此操作。什么是夹紧矢量如果在写自己的矢量实施步骤?

由于

夹具夹紧矢量到最小和最大

例如:

pc = # the point you are coloring now
p0 = # start point
p1 = # end point
v = p1 - p0
d = Length(v)
v = Normalize(v) # or Scale(v, 1/d)

v0 = pc - p0

t = Dot(v0, v)
t = Clamp(t/d, 0, 1)

color = (start_color * t) + (end_color * (1 - t))
有帮助吗?

解决方案

clamp(vec, lb, ub) == min(max(vec, lb), ub)

修改

min和max通常是在载体的原语操作。例如,如果你使用SSE矢量,还有的 _mm_min_ps 和<强> _mm_max_ps 内在其转成的 MINPS 和<强> MAXPS 上的x86指令。

其他提示

我认为一旦你清楚说明你的意思,你会发现,大部分的工作是为你...

完成

我猜要限制在长度矢量量(而不是矢量数据结构),以在指定范围内的谎言不改变其方向,不是吗?

所以:

if (v.length > max)
   v.setlength(max)
else if (v.length < min)
   v. setlength(min)

其中length()setlength()是否取决于对你如何保存你的载体实现。


如果您的矢量被存储在(角度,幅度)形成,这是几乎微不足道的。如果存储在直角坐标形式(即(X,Y,Z))您从Pythagorian定理得到lengthsetlength应由desired_length/current_length的因子缩放每个commponent。

在最简单的答案是当你考虑在一个球坐标系的矢量:{R,φ,θ}。 φ和θ都已经限于[-π,+π]和[-½π,+½π]反正。因此,你只需要从原点R钳位的距离。

好了,我会假设你要单独夹每个坐标。所以......

void clamp(const Vector3 &v, const Vector3 &min, const Vector3 &max)
{
    v.x = clamp(v.x, min.x, max.x);
    v.y = clamp(v.y, min.y, max.y);
    v.z = clamp(v.z, min.z, max.z);
}

int clamp(int value, int min, int max)
{
    if (value < min)
    {
        return min;
    }
    else if (value > max)
    {
        return max;
    }

    return value;
}

希望有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top