바운스 마찰로 인한 회전은 어떻게 계산합니까?


15

이전 질문 에서 다음과 같이 : 나는 공이 맞은 표면에서 사실적으로 튀는 공을 가지고 있습니다. 이제 히트의 마찰로 회전 시키려고 합니다.

이것이 충분히 간단하다는 것을 보여줍니다. 나는 매 틱마다 각도 속도로 공을 회전시키고 렌더링 할 때 동일한 회전을 적용합니다.

공이 벽에 닿으면 회전 속도가 다음의 영향을 받는다는 것을 알고 있습니다.

  • 표면을 칠 때 공의 초기 속도
  • 볼과 표면 의 마찰 계수 (물리적 상수)
  • 입사각 (공의 수신 속도 벡터 표면 법선 사이의 각도).

입사각은 공의 충격 및 출구 속도 벡터의 내적에 의해 근사됩니다. (1은 높은 스핀을 의미하고, -1은 스핀이 없음을 의미하며 그 밖의 모든 것은 상대적으로 중간에 있음)

위의 모든 것을 곱하고 0-1 범위로 변환하고 최대 회전 속도를 곱한 것을 확인하면 공이 예상대로 회전 속도로 반응하는 것처럼 보였습니다. 한 가지를 제외하고 : 항상 양의 값 때문에 시계 방향으로 회전합니다.


이것이 좋은 방법입니까? 더 간단한 방법을 생각할 수 있습니까?

이 방법이 제대로 보인다면 무엇을 놓치고 있습니까? 볼이 시계 반대 방향으로 회전해야 하는지를 어떻게 알 수 있습니까?

답변:


2

매우 간단하기 때문에 방법이 좋습니다. 당신이 필요할 수있는 한 가지는 볼의 이전 스핀에 대한 의존성입니다. 스피닝 볼은 회전 에너지를 나타내므로 현실적인 시뮬레이션은 다른 에너지와 함께이를 보존해야합니다.

그러나 공이 충격으로 회전하지 않으면 입사각 방향으로 회전하기 시작하는 상황을 상상할 수 없습니다. 즉, "시계 방향"또는 "반 시계 방향"은 입사각이 법선의 어느 쪽을 기준으로해야합니다.

원래 x 방향 벡터 (왼쪽에서 오른쪽으로 여행하는 경우 +1, 오른쪽에서 왼쪽으로 여행하는 경우 -1)를 결과에 곱하면됩니다.

편집 :이를 위해 교차 제품을 사용할 수 있습니다. Incident cross normalZ 방향으로 만 벡터를 제공합니다 (2D xy 평면에있는 경우). z 요소를 살펴보십시오. 양수이면 공의 접근 방식으로 인해 시계 방향으로 회전합니다. 음수이면 공이 반 시계 방향으로 회전해야합니다.


Hey eli 첫째로, 나는 공의 원래 회전을 고려하고 있는데, 내 게시물에서 언급하는 것을 잊어 버렸습니다. 둘째, 나는 x 방향 시스템이 작동한다고 생각하지 않습니다. 나는 그것을 시도했지만 볼이 왼쪽으로가는 아래에서 표면 안타 경우는 x 벡터는 것 -1, 실제로는 시계 방향으로 회전해야하면서, 반 시계 방향으로 회전을 의미한다
codemonkey

공의 원래 회전을 어떻게 고려합니까? 매우 빠르게 회전하면 완전히 다른 방향으로 움직일 수 있습니다. 귀하의 경우 내적 문제는 코사인 (짝수 함수)을 사용한다는 것입니다. 벡터 (사건과 법선) 사이의 관계 표시를 설정하려면 다른 것이 필요합니다. 이를 위해 교차 곱 (벡터 곱)을 사용할 수 있습니다. 교차 제품 방법을 포함하도록 답변을 편집했습니다.
eli

편집 후 답변을 다시 읽습니다. 그것을 시도하고 꽤 잘 작동했습니다. 원래의 회전에 관해서는, 회전 변화를 점진적으로 만드는 것에 대해서만 이야기하고있었습니다 ...
출발

흠, 편집은 내가 제안한 3 가지 솔루션 중 하나이며, 왜 그렇게 해야하는지 설명했습니다 (점은 각도의 방향이 아니라 크기 만 제공합니다). 아아, 내가 더 간결해야한다고 생각합니다.
Kaj

그 kaj에 대 한 미안, 그것은 나를 미끄러졌다 ... 아니 범죄 의도 :)
codemonkey

3

먼저 표면 법선에서 접하는 표면을 얻습니다 .t = (ny, -nx)

그런 다음 표면을 따라 속도 성분을 vt = v dot t 로 얻을 수 있습니다 .

이제 공의 회전을 계산할 수 있습니다. w = | ( normal * r) cross vt |, 여기서 r은 공의 반지름입니다.

여기서 나는 공이 회전 관성을 가지고 있다고 가정하고 그것이 표면을 따라 구르는 경우와 같은 속도로 즉시 회전하기 시작합니다. 마찰 계수를 사용하여보다 사실적으로 만들 수 있으며 원하는 경우 공의 회전 관성을 고려할 수 있습니다.


답변 Danik에 감사드립니다. 나는 이미 공의 회전 관성을 (새로운 회전에 추가함으로써) 그리고 총 회전 속도에 곱할 계수로서의 표면 마찰을 고려하고 있습니다. 마찰이 많을수록 회전 속도가 빨라집니다.
codemonkey

2

오케이, 어리석게 들릴지 모르지만 공 벡터의 내적과 표면 법선을 사용하지 않고 각도를 계산하기 위해 arccos를 사용하고 있습니까? 그 각도는 코사인 대칭 약 0이다 또는 마이너스 (동) (90도 이하) 긍정적인지 긍정적 때문에
이 경우 경우에 평면의 법선을 사용하는 대신 한 다음,면 방향 자체를 사용 각도에서 90도를 빼면 0에서 180까지는 -90에서 +90도 (또는 반경 방향으로 기울어 진 경우에는 -PI의 절반에서 PI의 절반)가됩니다.


음,이 경우를 생각해보십시오 : x + ve는 옳고 y + ive는 멈췄습니다. 표면 벡터 S = (1,0); V1 = (3,4) 위에서 타격하는 두 개의 충격 속도 벡터가 있고, 시계 방향으로 볼을 회전시켜야하며, V2 = (3, -4)는 아래에서 타격해야하며, 볼을 반 시계 방향으로 회전해야합니다. 이제 두 벡터의 법선은 각각 (3 / 5,4 / 5) & (3 / 5, -4 / 5)입니다. 이제 두 벡터의 내적은 3/5입니다. 생성 된 각도는 BOTH 벡터에 대해 arccos (3/5) = 53 도입니다. 어느 쪽이 맞지만 반대편에 있습니까? 따라서이 방법을 사용하면 여전히 시계 방향 회전이 발생합니다. 내 딜레마를 보시겠습니까?
codemonkey

3 가지 가능한 솔루션. 1) 법선을 사용하지 말고 위에서 설명한 방향으로 90도 빼십시오. 2) 법선의 x와 y를 바꾸고 하나를 거꾸로하여 (-1을 곱하여) 동일하게 시뮬레이션하십시오. 3) 교차 곱이 0도 주위에 대칭이 아닌 각도의 sin을 나타내므로 두 벡터의 교차 곱의 부호와 각도를 곱하십시오.
Kaj

내적은 각도를 제공하지 않고 각도의 크기 만 나타내며 각도의 방향도 필요합니다. 위의 세 가지 방법은 모두 사인을 사용하여 시뮬레이션합니다. 기본 삼각법을 사용하여 각도를 얻을 수도 있습니다. Sinα = 길이 대향면 / 길이 경사면 (대향면과 경사면 사이에 90도 각도를 갖는 삼각형을 기준으로 함). 그것과 피타고라스는 변의 길이를 계산할 것입니다.
Kaj

그건 그렇고, 원래의 대답을 다시 읽으십시오. 정상이 아닌 평면과 각도를 취하고 90도 빼서 딜레마를 해결합니다.
Kaj

0

가장 먼저해야 할 일은 벽에 부딪 치기 전에 회전 속도 나 회전 속도를 조절하는 것입니다. Si라고하자. Ss와 같이 타격 후 동일한 스핀을 유지하는 데 필요한 값보다 크거나 같거나 낮습니다. 이것으로 볼과 표면 사이의 마찰 값을 사용하여 스핀을 친 후 Se와 같은 실제 값을 얻을 수 있습니다.

튀는 표면을 가로 지르는 속도 성분 Vxi = Vi dot Vx를 구하십시오. Vx는 크기가 1 인 표면과 평행 한 벡터입니다.

찾고있는 값은 Ss = Vxi / r이며, 이는 Vxi를 각속도로 변환하는 것입니다. Si가 Ss보다 낮 으면 볼이 양의 스핀을 얻게됩니다. Si가 Ss와 같다면, 공은 이것에 대해 대략 같은 스핀을 유지해야한다. Si가 Ss보다 크면 공이 스핀을 잃어야한다

속도의 손실 및 이득은 마찰 값 Fr에 의존한다. 실제로 반지름과 마찰력 사이의 십자형이지만 원하는 값을 설정할 수 있습니다.

또한 바운스 코프 외에 볼과 표면 사이의 마찰로 인해 볼에서 에너지가 손실되므로 Vxi가 부정적인 영향을받습니다. 바운스 코프는 Vy에, 마찰은 Vx에 영향을 미칩니다.

볼의 변형을 고려해야합니다. 이것은 공이 벽에 붙어있는 시간 또는 프레임에 영향을 미치므로 마찰력이 스핀 및 출구 속도에 영향을 미치는 시간이 더 길어집니다. 이 변형은 모델이 원하는 방식에 따라 다릅니다.

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