24 lines
597 B
Go
24 lines
597 B
Go
|
|
package vertex
|
||
|
|
|
||
|
|
import "zworld/plugins/math/vec3"
|
||
|
|
|
||
|
|
type Triangle struct {
|
||
|
|
A, B, C vec3.T
|
||
|
|
}
|
||
|
|
|
||
|
|
func (t *Triangle) Normal() vec3.T {
|
||
|
|
// Set Vector U to (Triangle.p2 minus Triangle.p1)
|
||
|
|
u := t.B.Sub(t.A)
|
||
|
|
// Set Vector V to (Triangle.p3 minus Triangle.p1)
|
||
|
|
v := t.C.Sub(t.A)
|
||
|
|
|
||
|
|
// Set Normal.x to (multiply U.y by V.z) minus (multiply U.z by V.y)
|
||
|
|
x := u.Y*v.Z - u.Z*v.Y
|
||
|
|
// Set Normal.y to (multiply U.z by V.x) minus (multiply U.x by V.z)
|
||
|
|
y := u.Z*v.X - u.X*v.Z
|
||
|
|
// Set Normal.z to (multiply U.x by V.y) minus (multiply U.y by V.x)
|
||
|
|
z := u.X*v.Y - u.Y*v.X
|
||
|
|
|
||
|
|
return vec3.New(x, y, z).Normalized()
|
||
|
|
}
|