|
@@ -426,14 +426,14 @@ distance :: proc(p0, p1: $V/[$N]$E) -> E where IS_NUMERIC(E) {
|
|
|
}
|
|
|
|
|
|
reflect :: proc(I, N: $T) -> (out: T) where IS_ARRAY(T), IS_FLOAT(ELEM_TYPE(T)) {
|
|
|
- b := n * (2 * dot(n, i))
|
|
|
- return i - b
|
|
|
+ b := N * (2 * dot(N, I))
|
|
|
+ return I - b
|
|
|
}
|
|
|
refract :: proc(I, N: $T) -> (out: T) where IS_ARRAY(T), IS_FLOAT(ELEM_TYPE(T)) {
|
|
|
- dv := dot(n, i)
|
|
|
+ dv := dot(N, I)
|
|
|
k := 1 - eta*eta - (1 - dv*dv)
|
|
|
- a := i * eta
|
|
|
- b := n * eta*dv*math.sqrt(k)
|
|
|
+ a := I * eta
|
|
|
+ b := N * eta*dv*math.sqrt(k)
|
|
|
return (a - b) * E(int(k >= 0))
|
|
|
}
|
|
|
|