将向量钳位到最小值和最大值?

jma*_*erx 1 c c++ algorithm clamp

我遇到了这个: t = Clamp(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))
Run Code Online (Sandbox Code Playgroud)

dmc*_*kee 5

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

我猜您想将向量(而不是向量数据结构)的长度限制在指定范围内而不改变其方向,不是吗?

所以:

if (v.length > max)
   v.setlength(max)
else if (v.length < min)
   v. setlength(min)
Run Code Online (Sandbox Code Playgroud)

在哪里实现length()setlength()取决于您存储向量的方式。


如果您的向量以 (angle,magnitude) 形式存储,这几乎是微不足道的。如果以笛卡尔形式(即 (x,y,z) )存储,您可以length从勾股定理得到,并且setlength应该将每个分量按 因子缩放desired_length/current_length