0

Je cherche un algorithme qui prend deux cercles dynamiques et renvoie le point de contact. Pour une raison quelconque, en essayant de chercher ceci, je ne peux trouver que des ressources comme: http://ericleong.me/research/circle-circle/ qui décrivent des algorithmes qui retournent des vitesses résultantes.test de balayage de cercle et de cercle qui renvoie le point de contact

+0

Cela semble quelque chose de très basique, donc je suis probablement en train de manquer quelque chose, ou je le cherche sous le mauvais nom. Rip le karma je vais perdre quand cela est marqué en double :( – Julian

Répondre

0

Vous n'avez pas défini correctement le problème.

Let cercles centres se déplacent avec les équations

cx1 = cx1_0 + t * vx1 
cx2 = cx2_0 + t * vx2 
cy1 = cy1_0 + t * vy1 
cy2 = cy2_0 + t * vy2 

où cx1_0 commence coordonnée X du premier cercle, VX1 est composante x de sa vitesse.

Les cercles se touchent lorsque la distance centre-centre est égale à la somme des rayons. On peut utiliser des valeurs au carré:

(cx1 - cx2)^2 + (cy1 - cy2)^2 = (r1 + r2)^2 

expressions de substitution ci-dessus, les parenthèses ouvertes, résoudre l'équation quadratique du paramètre t inconnu. Vous pouvez obtenir 0, 1 ou deux solutions (aucune interaction, un contact, période d'intersection existe). Calculez ensuite les centres de coordonnées pour un moment de contact et obtenir le point tactile pour externe toucher:

x_touch = (cx1 * r1 + cx2 * r2)/(r1 + r2) 
similar for y 

Notez que je souligne externe, car toucher interne peut se produire (dans cette distance de cas est égal à la différence des rayons, mais je Je pense que ce cas n'est pas intéressant pour vous)