| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- // Copyright 2016 The G3N Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package math32
- // Line3 represents a 3D line segment defined by a start and an end point.
- type Line3 struct {
- start Vector3
- end Vector3
- }
- // NewLine3 creates and returns a pointer to a new Line3 with the
- // specified start and end points.
- func NewLine3(start, end *Vector3) *Line3 {
- l := new(Line3)
- l.Set(start, end)
- return l
- }
- // Set sets this line segment start and end points.
- // Returns pointer to this updated line segment.
- func (l *Line3) Set(start, end *Vector3) *Line3 {
- if start != nil {
- l.start = *start
- }
- if end != nil {
- l.end = *end
- }
- return l
- }
- // Copy copy other line segment to this one.
- // Returns pointer to this updated line segment.
- func (l *Line3) Copy(other *Line3) *Line3 {
- *l = *other
- return l
- }
- // Center calculates this line segment center point.
- // Store its pointer into optionalTarget, if not nil, and also returns it.
- func (l *Line3) Center(optionalTarget *Vector3) *Vector3 {
- var result *Vector3
- if optionalTarget == nil {
- result = NewVector3(0, 0, 0)
- } else {
- result = optionalTarget
- }
- return result.AddVectors(&l.start, &l.end).MultiplyScalar(0.5)
- }
- // Delta calculates the vector from the start to end point of this line segment.
- // Store its pointer in optionalTarget, if not nil, and also returns it.
- func (l *Line3) Delta(optionalTarget *Vector3) *Vector3 {
- var result *Vector3
- if optionalTarget == nil {
- result = NewVector3(0, 0, 0)
- } else {
- result = optionalTarget
- }
- return result.SubVectors(&l.end, &l.start)
- }
- // DistanceSq returns the square of the distance from the start point to the end point.
- func (l *Line3) DistanceSq() float32 {
- return l.start.DistanceToSquared(&l.end)
- }
- // Distance returns the distance from the start point to the end point.
- func (l *Line3) Distance() float32 {
- return l.start.DistanceTo(&l.end)
- }
- // ApplyMatrix4 applies the specified matrix to this line segment start and end points.
- // Returns pointer to this updated line segment.
- func (l *Line3) ApplyMatrix4(matrix *Matrix4) *Line3 {
- l.start.ApplyMatrix4(matrix)
- l.end.ApplyMatrix4(matrix)
- return l
- }
- // Equals returns if this line segement is equal to other.
- func (l *Line3) Equals(other *Line3) bool {
- return other.start.Equals(&l.start) && other.end.Equals(&l.end)
- }
- // Clone creates and returns a pointer to a copy of this line segment.
- func (l *Line3) Clone() *Line3 {
- return NewLine3(&l.start, &l.end)
- }
|