34 lines
675 B
Go
34 lines
675 B
Go
package main
|
|
|
|
// Sphere
|
|
type Sphere struct {
|
|
center Vector3
|
|
radius float64
|
|
material *Material
|
|
}
|
|
|
|
func (s Sphere) Distance(p Vector3) (float64, Material) {
|
|
return p.Sub(s.center).Length() - s.radius, *s.material
|
|
}
|
|
|
|
// Box
|
|
type Box struct {
|
|
center Vector3
|
|
dimensions Vector3
|
|
material Material
|
|
}
|
|
|
|
func (s Box) Distance(p Vector3) (float64, Material) {
|
|
q := p.Sub(s.center).Abs().Sub(s.dimensions)
|
|
return q.Max(0.0).Length() + min(max(q.X, max(q.Y, q.Z)), 0.0), s.material
|
|
}
|
|
|
|
type Plane struct {
|
|
normal Vector3
|
|
height float64
|
|
material Material
|
|
}
|
|
|
|
func (s Plane) Distance(p Vector3) (float64, Material) {
|
|
return p.Dot(s.normal) - s.height, s.material
|
|
}
|