2012-03-07 1 views
0

오브젝트에 충돌 할 때 그 원에 대한 반사각을 계산할 수 있도록 원에 탄젠트를 찾는 알고리즘을 작성하려고합니다. 나는 원의 중심과 반경의 x와 y 값을 안다. 또한 다른 객체와의 충돌 점에 대한 x 및 y 값을가집니다. Java 라이브러리를 사용하여 탄젠트를 계산하는 방법에 대한 도움은 매우 좋을 것입니다. 그렇지 않으면 다른 방법으로 반사 각도를 계산하는 방법에 대한 권장 사항이있는 경우 감사하게 생각합니다. 감사.원상의 점으로부터 탄젠트를 계산합니까?

+0

그래서 접선의 방정식을 찾는 방법을 묻고 있습니까? – noMAD

+2

종이 & 연필로 어떻게 할 것입니까? –

+0

글쎄요, 그렇다고 대답 할 수는 있겠지만 자바 라이브러리가 내가하는 일을 더 쉽게 할 수있는 방법이 있습니까? 또한 내가하는 모든 일이이 반사 각도를 계산하는 좋은 방법인지 여부. – John

답변

2

내가 알기론 실제로 원의 발생 각도를 계산하고 싶습니다. 이를 위해서는 원의 움직임의 각도와 반사되는 표면의 각도를 알아야합니다. 충돌 지점은 원이 충돌하는 각도와 상관없이 동일하기 때문에 충분하지 않습니다. 이 각도를 가지고 있다면 원의 새로운 각도는 (360 - circle's angle + (surface's angle * 2)) % 360입니다. 나는 당신이 운동의 움직임을 묘사하는 것에 대해서는 의심 할 여지가 있지만, 이미 운동을 묘사하는 두 가지 변수가있을 수 있습니다. "모든 업데이트에 대해 dx 단위가 오른쪽이고 dy 단위가 위로 움직입니다." 이것을 가지고 있다면 원의 각도를도 단위로 (180/π) * arctan(dy/dx)으로 계산할 수 있습니다. 이 수식은 dy/dx이 평면을 가로 지르는 원의 움직임에 의해 생성 된 선의 기울기를 제공하기 때문에 작동합니다. 일단 기울기가 생기면 우리는 각도를 라디안으로 나타내는 역 탄젠트 (arctan)를 취합니다. 마지막으로 180/π 부분을 사용하여 해당 각도를 각도로 변환합니다.

이것은 표면의 기울기를 사용하는 경우에도 적용됩니다. 표면이 점 (x1, y1)에서 시작하여 점 (x2, y2)에서 끝나는 선이라고 가정 해보십시오. 표면의 기울기는 (y1 - y2)/(x1 - x2)으로 나타납니다. 그런 다음 표면의 기울기를 다음과 같이 대체하여 앞의 공식을 적용 할 수 있습니다. (180/π) * arctan((y1 - y2)/(x1 - x2)).

이제 서클과 서페이스가 각도로 표시되며 위의 첫 번째 수식을 적용 할 수 있습니다.

+0

예, 고마워요. 그것이 바로 제가 의미했던 것입니다. 표면의 각이 무엇인지에 대해 다소 혼란 스럽지만, 각도를 계산하기 위해 dy와 dx 대신에 무엇이 사용될 것입니까? – John

+1

기본적으로 곡면의 기울기를 찾아야합니다. 표면이 점'(x1, y1)'에서 시작하여'(x2, y2) '를 가리키는 선이라고 가정 해보십시오. 그러면'dy = y2 - y1'과'dx = x2 - x1'이됩니다. – justinrstout

+0

감사합니다. 충돌이 모서리에 있으면 충돌 지점에서 표면 기울기가 원의 접선이됩니까? 그렇다면 그 경사면에서 어떻게 dy와 dx를 얻어야합니까? – John