안드로이드 개발 질문/답변
(글 수 45,052)
제가 지금 두 좌표간의 거리를
result = Math.sqrt((x - px)*(x - px)+(y - py)*(y - py));
이러한 방법으로 구하고있습니다.
이것과 마찬가지로
두 좌표간의 각도를 구하고 싶습니다.
0, 0과 100, 0의 좌표면 아마 90도가 구해지나요? 아무튼 그렇고
0, 0과 100, 10의 좌표로 각도의 값을 얻고싶습니다.
어떻게 해야 할까요?
한가지 더 질문을 드리자면
좌표의 값과 각도, 이동거리를 이용해 결과 좌표를 얻고싶습니다
0,0의 좌표가 있고, 90도라는 각도가 있고, 이동거리 10이라는 값들이 있을때의 결과값
10, 0이 나오는 것처럼
만들고 싶은데 어떻게해야 할지 모르겠습니다. 답변 부탁드립니다.
result = Math.sqrt((x - px)*(x - px)+(y - py)*(y - py));
이러한 방법으로 구하고있습니다.
이것과 마찬가지로
두 좌표간의 각도를 구하고 싶습니다.
0, 0과 100, 0의 좌표면 아마 90도가 구해지나요? 아무튼 그렇고
0, 0과 100, 10의 좌표로 각도의 값을 얻고싶습니다.
어떻게 해야 할까요?
한가지 더 질문을 드리자면
좌표의 값과 각도, 이동거리를 이용해 결과 좌표를 얻고싶습니다
0,0의 좌표가 있고, 90도라는 각도가 있고, 이동거리 10이라는 값들이 있을때의 결과값
10, 0이 나오는 것처럼
만들고 싶은데 어떻게해야 할지 모르겠습니다. 답변 부탁드립니다.
2011.02.27 16:43:01
좌표값과 이동거리, 좌표를 통한 좌표 위치 알아내기
거리x = Math.cos(결과 E); //위에서 구한 결과 E
거리y = Math.sin(결과 E);
좌표 A(ax, ay) + 거리(거리x , 거리y);
거리x = Math.cos(결과 E); //위에서 구한 결과 E
거리y = Math.sin(결과 E);
좌표 A(ax, ay) + 거리(거리x , 거리y);
2011.02.28 00:18:50
인셀님 다 좋은데... Math.toDegree 라는 함수로 라디안을 Degree로 쉽게 바꿀수 있답니다.
그리고 아래에 써주신 식에서 E가 단위가 Degree인데 그걸 그대로 Math.cos에 넣으면 원하는 결과가 안나옵니다.
Math.toRadian 으로 변환해줘야 합니다.
또하나 말씀 드리면...
저건 회전축이 0,0일 경우입니다. 어차피 0,0에서 회전해봐야 화면안에서는 1사분면만 보이기 때문에 저렇게 구할수 있는겁니다.
4개의 사분면 모두 보이는, 혹은 모두 계산해야 하는경우 저렇게 계산하면 안됩니다.
계산 방식이 완전히 틀린건 아니고... atan이 -PI/2 이상 PI/2 이하의 범위로 나오기 때문에 0~2PI 범위라면
이를 계산할수 있도록 경우를 나눠줘야 한다는겁니다.
그리고 아래에 써주신 식에서 E가 단위가 Degree인데 그걸 그대로 Math.cos에 넣으면 원하는 결과가 안나옵니다.
Math.toRadian 으로 변환해줘야 합니다.
또하나 말씀 드리면...
저건 회전축이 0,0일 경우입니다. 어차피 0,0에서 회전해봐야 화면안에서는 1사분면만 보이기 때문에 저렇게 구할수 있는겁니다.
4개의 사분면 모두 보이는, 혹은 모두 계산해야 하는경우 저렇게 계산하면 안됩니다.
계산 방식이 완전히 틀린건 아니고... atan이 -PI/2 이상 PI/2 이하의 범위로 나오기 때문에 0~2PI 범위라면
이를 계산할수 있도록 경우를 나눠줘야 한다는겁니다.




좌표 A(ax, ay);
좌표 B(ba, by);
결과 C = bx - ax;
결과 D = by - ay;
결과 E = Math.atan2(결과D, 결과C);
최종 값 = 결과 E * (180 / 3.141592); //각도 값을 바꿔줍니다