1. ホーム
  2. c++

[解決済み] ベクトルを最小と最大にクランプする?

2022-02-09 01:43:49

質問

こんなことに遭遇しました。 t = Clamp(t/d, 0, 1) が、この操作をベクトルに対してどのように行うのかがわかりません。ベクターの実装を自分で書く場合、どのような手順でベクターをクランプするのでしょうか?

ありがとうございます。

clamp ベクトルを最小値と最大値にクランプする。

の例です。

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 最大値 になる直訳は MINPS MAXPS の命令をx86で実行します。