Với các vị trí và vận tốc 2 chiều của một cặp bóng bi-a ngay trước khi va chạm, hãy tính vận tốc của chúng sau một va chạm hoàn toàn đàn hồi . Các quả bóng được coi là hình cầu lý tưởng (hoặc tương đương: hình tròn) có cùng bán kính, cùng khối lượng, mật độ đồng đều và không có ma sát.
Đầu vào bao gồm 8 số: p0x,p0y,v0x,v0y,p1x,p1y,v1x,v1y
trong đó p0x,p0y
là tâm của quả bóng thứ nhất, v0x,v0y
vận tốc của nó và tương tự p1x,p1y,v1x,v1y
cho quả bóng thứ hai. Bạn có thể chấp nhận đầu vào theo bất kỳ thứ tự nào và được cấu trúc theo bất kỳ cách thuận tiện nào, ví dụ như mảng 2x2x2 hoặc có thể là mảng 2x2 cho p
và hai mảng có độ dài 2 cho v0
và v1
. Cũng tốt để lấy số phức (nếu ngôn ngữ của bạn hỗ trợ chúng) thay vì cặp xy. Tuy nhiên, bạn không nên lấy đầu vào trong một hệ tọa độ khác ngoài Cartesian, tức là cực không được phép.
Lưu ý rằng bán kính của một quả bóng bi-a là một nửa khoảng cách giữa p0x,p0y
và p1x,p1y
vì vậy nó không được đưa ra như một phần rõ ràng của đầu vào.
Viết chương trình hoặc hàm xuất hoặc trả về 4 số trong bất kỳ biểu diễn Cartesian thuận tiện nào: các giá trị sau va chạm của v0x,v0y,v1x,v1y
.
Một thuật toán có thể là:
tìm dòng bình thường đi qua cả hai trung tâm
tìm đường tiếp tuyến đi qua trung điểm giữa hai tâm và vuông góc với đường bình thường
thay đổi hệ tọa độ và phá vỡ
v0x,v0y
vàv1x,v1y
thành các thành phần tiếp tuyến và bình thường của chúngv0t,v0n
vàv1t,v1n
trao đổi các thành phần bình thường của
v0
vàv1
, bảo quản các thành phần tiếp tuyến của chúngthay đổi trở lại hệ tọa độ ban đầu
Các xét nghiệm (kết quả được làm tròn đến 5 chữ số thập phân):
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]
Chiến thắng ngắn nhất. Không sơ hở.
cảm ơn @Anush đã giúp sửa màu nền của sơ đồ
r=p-q
vớip-=q
và tiếp tục sử dụngp
thay vìr
, giống như trong câu trả lời của Neil js