2016-11-10 1 views
2

I 육각형 격자 다음과 중앙에서 각 에지 육각형으로도 계산 노력 (하늘색)가 : 청색 헥스 강조 enter image description here어떻게 극좌표가 올바르게 표현 될 수 있습니까?

(오른쪽 아래) 0도에서 정확하고 사분면이고 정확한 . 내 각도 계산 방법은 다음과 같습니다.

private static function calculateAngle(hex1:Hexagon, hex2:Hexagon):Number { 
    // hex1 is always passed in as the grid center or start 
    var diffY:Number = Math.abs(hex2.center.y) - Math.abs(hex1.center.y); 
    var diffX:Number = Math.abs(hex2.center.x) - Math.abs(hex1.center.x); 
    var radians:Number = Math.atan(diffY/diffX); 

    return radians * 180/Math.PI; 
} 

왜 각 각도 (각 육각형의 텍스트)가 잘못 되었습니까?

+1

'center' 속성의'Point' 객체입니까? – null

+0

@null : 예'center'는'Point' 객체입니다. – IAbstract

+0

['Point'] (http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/geom/Point.html)에 각도에 대한 게터가 있다고 생각했지만, 정적 메소드'polar (len : Number, angle : Number) : Point'는 극좌표에서 점을 생성합니다. 기존의 극좌표를 얻는 방법은 없습니다. – null

답변

2

당신은 정말로 가깝습니다. 당신은 atan의 주기성을 보상하기 만하면됩니다. 이를 수행하는 표준 방법은 [0, pi)의 부호없는 각도 대신 (-pi, pi]에 부호가있는 각도를 반환하는 atan2을 사용하는 것입니다. 당신은 다음과 같이 수행 할 수 있습니다 : 그 값의 부호의이 자사의 사분면하는 알고 atan2 필요합니다 : 거기에 내가 abs에 전화를 포함하지 않았다

var radians:Number = Math.atan2(
    hex2.center.y - hex1.center.y, hex2.center.x - hex1.center.x); 

주의!

편집 : 당신이 센터 진수와 블루 강조 진수 사이의 최소 각도를 나타내는 [0, pi]의 각도를 찾고 있다면, 당신은 단지 atan2의 결과의 절대 값을 취할 수 return Math.abs(radians) * 180/Math.PI을; 그 질문은 당신이 요구하는 것이 어느 정도는 불분명합니다.

+0

나는 이것을했지만 왼쪽 각도는'> 180'을 음수로 :'-173','-166' ... '-6'. 그래서 저는 * normalized * :'(라디안 <180) 반환 라디안 + 360' – IAbstract

관련 문제