github.com/pavlo67/common@v0.5.3/common/geolib/point_test.go (about)

     1  package geolib
     2  
     3  import (
     4  	"math"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  
     9  	"github.com/pavlo67/common/common/mathlib/plane"
    10  )
    11  
    12  func TestPoint_MovedBeared(t *testing.T) {
    13  	tests := []struct {
    14  		name    string
    15  		p       Point
    16  		bearing Bearing
    17  		moving  plane.Point2
    18  	}{
    19  		{
    20  			name:    "",
    21  			p:       Point{},
    22  			bearing: 0,
    23  			moving:  plane.Point2{400, 0},
    24  		},
    25  
    26  		{
    27  			name:    "",
    28  			p:       Point{45, 38},
    29  			bearing: 33,
    30  			moving:  plane.Point2{400, 200},
    31  		},
    32  
    33  		{
    34  			name:    "",
    35  			p:       Point{45, 38},
    36  			bearing: -90,
    37  			moving:  plane.Point2{1400, 200},
    38  		},
    39  
    40  		{
    41  			name:    "",
    42  			p:       Point{45, 38},
    43  			bearing: -180,
    44  			moving:  plane.Point2{2400, 200},
    45  		},
    46  	}
    47  	for _, tt := range tests {
    48  		t.Run(tt.name, func(t *testing.T) {
    49  			pMoved := tt.p.MovedBeared(tt.bearing, tt.moving)
    50  
    51  			movingGeo := tt.moving.RotateByAngle(tt.bearing.XToYAngleFromOy())
    52  			// movingGeoXToYAngleFromOx := movingGeo.XToYAngleFromOx()
    53  			pMovedDirect := tt.p.MovedAt(movingGeo)
    54  
    55  			// t.Logf("tt.p: %+v, movingGeo: %v, pMoved: %+v, pMovedDirect: %+v", tt.p, movingGeo, pMoved, pMovedDirect)
    56  
    57  			require.Truef(t, math.Abs(tt.p.DistanceTo(pMoved)-movingGeo.Radius()) < DistanceEps,
    58  				"tt.p.DistanceTo(pMoved): %f, movingGeo.Radius(): %f", tt.p.DistanceTo(pMoved), movingGeo.Radius())
    59  
    60  			require.Truef(t, math.Abs(pMoved.DistanceTo(pMovedDirect)) < DistanceEps,
    61  				"pMoved.DistanceTo(pMovedDirect): %f", pMoved.DistanceTo(pMovedDirect))
    62  
    63  			//if !math.IsNaN(float64(movingGeoXToYAngleFromOx)) {
    64  			//	require.Truef(t, math.Abs(float64(stepGeoXToYAngleFromOy-geoPointInitial.BearingTo(*geoPoint).XToYAngle().Canon())) < DistanceEps,
    65  			//		"stepGeoXToYAngleFromOy: %f, geoPointInitial.BearingTo(*geoPoint): %f, geoPointInitial.BearingTo(*geoPoint).XToYAngle(): %f",
    66  			//		stepGeoXToYAngleFromOy, geoPointInitial.BearingTo(*geoPoint), geoPointInitial.BearingTo(*geoPoint).XToYAngle().Canon())
    67  			//}
    68  
    69  			movingReturn := plane.Point2{}.Sub(tt.moving)
    70  			geoPointReturn := pMoved.MovedBeared(tt.bearing, movingReturn)
    71  
    72  			require.Truef(t, tt.p.DistanceTo(geoPointReturn) < DistanceEps,
    73  				"tt.p.DistanceTo(geoPointReturn): %f", tt.p.DistanceTo(geoPointReturn))
    74  
    75  		})
    76  	}
    77  }