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 }