시작점, 거리 및 각도를 사용하여 새 좌표 찾기


12

좋아, 포인트 좌표가 있다고 해

var coordinate = { x: 10, y: 20 };

이제 거리와 각도도 있습니다.

var distance = 20;
var angle = 72;

내가 해결하려는 문제는 시작 좌표에서 각도 방향으로 20 점을 이동하려면 새 좌표가 무엇인지 어떻게 알 수 있습니까?

대답은 사인 / 코사인과 관련이 있다는 것을 알고 있습니다. 누구든지 도울 수 있습니까?


1
무엇에서 72도? X 축, Y 축? 다른 것? 시계 방향, 반 시계 방향?
pdr

@pdr 90 도는 북쪽 방향, 45 도는 북동 방향 등입니다.
dqhendricks

답변:


5

소카 토아

사인 = 반대 / 고전 위 코사인 = 인접 / 고전 위 탄젠트 = 반대 / 인접

귀하의 예에서 :

Sine(72) = Y/20 -> Y = Sine(72) * 20
Cosine(72) = X/20 -> X = Cosine(72) *20

문제는 사분면에주의를 기울여야한다는 것입니다. 이것은 오른쪽 위 사분면에서 완벽하게 작동하지만 다른 3 사분면에서는 그다지 좋지 않습니다.


1
이것은 모든 사분면에서 작동합니다. 벡터 (X, Y)를 회전시키는 공식은 X '= X * sin (angle) + Y * cos (angle) 및 Y'= X * sin (angle) + Y * -cos (Angle)입니다. 이것은 x 축 (1,0)에서 회전 할 때 위에있는 것을 단순화합니다.
질긴 검볼

흠 ... 사분면에 관한 문제가 있다는 것을 기억하고 있습니까?
Dave Nay

2
자바 스크립트 Math.sin등에서 라디안으로 입력이 이루어 지므로 다음을 변환해야합니다.radians = (degrees * (Math.PI/180)
Brian

1
@DaveNay 당신은 아크 기능을 할 때 문제가 있습니다. Sin (45도) = Sin (135도) 따라서 arcsin (sin (135도))은 45도를 반환합니다. Cos (45) = Cos (315) ...
mhoran_psprep

2

움직일 수있는 유형 스크립트 에서 자바 스크립트 적응을 기록하기 만하면됩니다.

function createCoord(coord, bearing, distance){
    /** http://www.movable-type.co.uk/scripts/latlong.html
     φ is latitude, λ is longitude, 
     θ is the bearing (clockwise from north), 
     δ is the angular distance d/R; 
     d being the distance travelled, R the earth’s radius*
     **/

    var 
        radius = 6371e3, //meters
        δ = Number(distance) / radius, // angular distance in radians
        θ = Number(bearing).toRad();
        φ1 = coord[1].toRad(),
        λ1 = coord[0].toRad();

    var φ2 = Math.asin(Math.sin1)*Math.cos(δ) + Math.cos1)*Math.sin(δ)*Math.cos(θ));

    var λ2 = λ1 + Math.atan2(Math.sin(θ)*Math.sin(δ)*Math.cos1), Math.cos(δ)-Math.sin1)*Math.sin2));

    λ2 = 2+3*Math.PI) % (2*Math.PI) - Math.PI; // normalise to -180..+180°

    return 2.toDeg(), φ2.toDeg()]; //[lon, lat]
}

Number.prototype.toDeg = function() { return this * 180 / Math.PI; }
Number.prototype.toRad = function() { return this * Math.PI / 180; }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.