원의 한 점에서 라디안 각도를 얻습니다.


14

원 주위를 회전하는 다이얼을 만들고 있습니다.

클릭하기 전에

이 다이얼을 사용하면 원의 아무 곳이나 마우스로 움직여서 원의 위치를 ​​클릭과 같은 각도로 조정할 수 있습니다. 예를 들어, 위의 다이얼에서 아래의 분홍색으로 표시된 지점을 클릭하면 다이얼을 해당 지점 위의 원으로 이동합니다.

클릭 후 (분홍색)

반지름과 각도가 주어진 원에서 점의 위치를 ​​얻는 방법을 알고 있습니다 (라디안). 이것이이 공식입니다 .

x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;

그러나 나는 반대의 것을하고 싶습니다. 클릭 포인트가있어 원의 포인트 (제어 노브가있는 곳)로 바꾸고 싶습니다. 이 점 (및 주어진 반지름)을 사용하여 각도를 라디안으로 계산하여 제어 노브를 원에 동일한 각도로 배치 할 수 있습니다.

이것을 달성하는 데 사용할 수있는 편리한 공식이 있습니까?


점 사이의 각도를 구하는 수식을 찾고 있습니까?
윌리엄 마리아 거

두 점 사이의 각도를 얻을 수 있습니까? 기울기를 계산할 수는 있지만 삼각형을 만들고 역삼 각 함수를 사용하여이 문제를 해결하려면 세 번째 점이 필요하다고 생각합니다.
편집자

나는 그것을하는 방법을 보여주는 답변을 게시했습니다.
윌리엄 마리아 거

3
당신이 정말로 가진 것은 두 벡터 사이각도 입니다. 둘 다 원의 중심에서 시작하여 동일한 크기 (원의 반경)를 갖습니다.
MichaelHouse

여기에 수학이 있습니다 : 역삼 각 함수 . atan의 약자로 arctan, 그리고 atan2각각의 인수를 허용하는 기능은, 그리고 당신을 위해 분할을 수행합니다.
voithos

답변:


25

atan2 기능을 확인하십시오 .

이하면 (0,0) 및 (X, Y) 사이의 각도를 제공 xy함수 인자 인.

편집 : 원의 중심이 (0, 0)이 아닌 경우 상관없이 다음과 같이하십시오 atan2(y - cy, x - cx).


내 서클의 중심이 아닌 경우 중요합니까 (0,0)? atan2아래 @Luis에 표시된 것처럼 인수를 오프셋으로 추측 합니다.
편집자

빼기 만하면 번역됩니다. 편집 내용을 참조하십시오.
jcora

3
-1 : ATAN2의 첫 번째 매개 변수입니다y
루이스 에스트라다

2
@LuisEstrada에게 감사드립니다. 방금 수정했습니다. (희망스럽게도 +1로 만들 것입니다.)
jcora

+ Luis Estrada nnecro-bump를 시켜서 미안하지만, 고맙습니다. 나는 하루 반 동안 내 프로그램을 디버깅하려고했습니다. 그것은 논쟁의 여지 atan2가 있었다는 것이 밝혀졌습니다 !
Carcigenicate

8

atan2 기능 과 함께 노브 중심과 커서 지점이 필요합니다 . 그런 다음 다음과 같이 사용하십시오.

 angle = atan2(mouseY - knobCenterY, mouseX - knobCenterX)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.