충격 직전에 한 쌍의 당구 공의 2 차원 위치와 속도를 고려할 때, 완전히 탄성 충돌 한 후에 속도를 계산하십시오 . 볼은 동일한 반경, 동일한 질량, 균일 한 밀도 및 마찰이없는 이상적인 구 (또는 이와 동등한 원)로 가정합니다.
: 입력 8 개 숫자로 구성되어 첫 번째 볼의 중심 유사의 속도, 두 번째 공. 당신은 어떤 순서로 입력을 허용하고, 2x2x2 배열, 아니면 2 × 2 배열로 예를 들어, 어떤 편리한 방법으로 구성 할 수 와 두 개의 길이 2 배열 하고 . xy 쌍 대신 복잡한 숫자 (언어가 지원하는 경우)를 사용하는 것도 좋습니다. 그러나 직교 이외의 좌표계에서는 입력을 가져서는 안됩니다. 즉, 극좌표는 허용되지 않습니다.p0x,p0y,v0x,v0y,p1x,p1y,v1x,v1y
p0x,p0y
v0x,v0y
p1x,p1y,v1x,v1y
p
v0
v1
참고 당구 공의 반경 간의 거리의 절반 인 것으로 p0x,p0y
하고 p1x,p1y
이 입력의 명시 적 부분으로 지정되지 그래서.
편리한 데카르트 표현으로 사후 충돌 값인 4 개의 숫자를 출력하거나 반환하는 프로그램 또는 함수를 작성하십시오 v0x,v0y,v1x,v1y
.
가능한 알고리즘은 다음과 같습니다.
두 센터를 통과 하는 법선을 찾으십시오
두 중심 사이의 중간 점을 통과하고 법선에 수직 인 접선을 찾습니다.
좌표계 및 분해 달라
v0x,v0y
하고v1x,v1y
자신의 접선 및 일반 구성 요소로v0t,v0n
하고v1t,v1n
접선 구성 요소를 유지하면서
v0
및 의 일반 구성 요소를 교체v1
원래 좌표계로 다시 변경
테스트 (소수점 5 자리로 반올림) :
p0x p0y v0x v0y p1x p1y v1x v1y -> v0x' v0y' v1x' v1y'
[-34.5,-81.8, 34.7,-76.1, 96.2,-25.2, 59.2,-93.3] [ 49.05873, -69.88191, 44.84127, -99.51809]
[ 36.9, 77.7,-13.6,-80.8, -7.4, 34.4, 15.1,-71.8] [ 5.57641, -62.05647, -4.07641, -90.54353]
[-51.0, 17.6, 46.1,-80.1, 68.6, 54.0,-35.1,-73.9] [ -26.48927,-102.19239, 37.48927, -51.80761]
[-21.1,-52.6,-77.7, 91.5, 46.0, 94.1, 83.8, 93.7] [ -48.92598, 154.40834, 55.02598, 30.79166]
[ 91.3, -5.3, 72.6, 89.0, 97.8, 50.5, 36.2, 85.7] [ 71.73343, 81.56080, 37.06657, 93.13920]
[-79.9, 54.9, 92.5,-40.7,-20.8,-46.9,-16.4, -0.9] [ 47.76727, 36.35232, 28.33273, -77.95232]
[ 29.1, 80.7, 76.9,-85.1,-29.3,-49.5,-29.0,-13.0] [ 86.08581, -64.62067, -38.18581, -33.47933]
[ 97.7,-89.0, 72.5, 12.4, 77.8,-88.2, 31.5,-34.0] [ 33.42847, 13.97071, 70.57153, -35.57071]
[-22.2, 22.6,-61.3, 87.1, 67.0, 57.6,-15.3,-23.1] [ -58.90816, 88.03850, -17.69184, -24.03850]
[-95.4, 15.0, 5.3, 39.5,-54.7,-28.5, -0.7, 0.8] [ 21.80656, 21.85786, -17.20656, 18.44214]
[ 84.0,-26.8,-98.6,-85.6,-90.1, 30.9,-48.1, 37.2] [ -89.76828, -88.52700, -56.93172, 40.12700]
[ 57.8, 90.4, 53.2,-74.1, 76.4,-94.4,-68.1,-69.3] [ 51.50525, -57.26181, -66.40525, -86.13819]
[ 92.9, 69.8,-31.3, 72.6,-49.1,-78.8,-62.3,-81.6] [-123.11680, -23.48435, 29.51680, 14.48435]
[-10.3,-84.5,-93.5,-95.6, 35.0, 22.6, 44.8, 75.5] [ -11.12485, 99.15449, -37.57515,-119.25449]
[ -3.9, 55.8,-83.3, 9.1, -2.7,-95.6, 37.7,-47.8] [ -82.84144, -48.75541, 37.24144, 10.05541]
[-76.5,-88.4,-76.7,-49.9, 84.5, 38.0, 4.2, 18.4] [ 6.52461, 15.43907, -79.02461, -46.93907]
[ 64.2,-19.3, 67.2, 45.4,-27.1,-28.7, 64.7, -4.3] [ 59.66292, 44.62400, 72.23708, -3.52400]
[ 9.8, 70.7,-66.2, 63.0,-58.7, 59.5, 83.7,-10.6] [ 68.07646, 84.95469, -50.57646, -32.55469]
[ 62.9, 46.4, 85.0, 87.4, 36.3,-29.0,-63.0,-56.3] [ 23.53487, -86.82822, -1.53487, 117.92822]
[ -5.5, 35.6, 17.6,-54.3, -2.2, 66.8,-15.2, 11.8] [ 24.15112, 7.63786, -21.75112, -50.13786]
최단 승리. 허점이 없습니다.
다이어그램의 배경색을 수정하는 데 도움을 주신 @Anush에게 감사드립니다.
r=p-q
와 함께p-=q
추가로 사용p
하는 대신r
에 같은 닐의 JS 대답