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)
我认为一旦你清楚地说明你的意思,你会发现大部分工作都是为你完成的......
我猜您想将向量(而不是向量数据结构)的长度限制在指定范围内而不改变其方向,不是吗?
所以:
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。
| 归档时间: |
|
| 查看次数: |
11764 次 |
| 最近记录: |