오브젝트에 충돌 할 때 그 원에 대한 반사각을 계산할 수 있도록 원에 탄젠트를 찾는 알고리즘을 작성하려고합니다. 나는 원의 중심과 반경의 x와 y 값을 안다. 또한 다른 객체와의 충돌 점에 대한 x 및 y 값을가집니다. Java 라이브러리를 사용하여 탄젠트를 계산하는 방법에 대한 도움은 매우 좋을 것입니다. 그렇지 않으면 다른 방법으로 반사 각도를 계산하는 방법에 대한 권장 사항이있는 경우 감사하게 생각합니다. 감사.원상의 점으로부터 탄젠트를 계산합니까?
답변
내가 알기론 실제로 원의 발생 각도를 계산하고 싶습니다. 이를 위해서는 원의 움직임의 각도와 반사되는 표면의 각도를 알아야합니다. 충돌 지점은 원이 충돌하는 각도와 상관없이 동일하기 때문에 충분하지 않습니다. 이 각도를 가지고 있다면 원의 새로운 각도는 (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))
.
이제 서클과 서페이스가 각도로 표시되며 위의 첫 번째 수식을 적용 할 수 있습니다.
예, 고마워요. 그것이 바로 제가 의미했던 것입니다. 표면의 각이 무엇인지에 대해 다소 혼란 스럽지만, 각도를 계산하기 위해 dy와 dx 대신에 무엇이 사용될 것입니까? – John
기본적으로 곡면의 기울기를 찾아야합니다. 표면이 점'(x1, y1)'에서 시작하여'(x2, y2) '를 가리키는 선이라고 가정 해보십시오. 그러면'dy = y2 - y1'과'dx = x2 - x1'이됩니다. – justinrstout
감사합니다. 충돌이 모서리에 있으면 충돌 지점에서 표면 기울기가 원의 접선이됩니까? 그렇다면 그 경사면에서 어떻게 dy와 dx를 얻어야합니까? – John
그래서 접선의 방정식을 찾는 방법을 묻고 있습니까? – noMAD
종이 & 연필로 어떻게 할 것입니까? –
글쎄요, 그렇다고 대답 할 수는 있겠지만 자바 라이브러리가 내가하는 일을 더 쉽게 할 수있는 방법이 있습니까? 또한 내가하는 모든 일이이 반사 각도를 계산하는 좋은 방법인지 여부. – John