Brève explication du problème
Écrivez un programme pour trouver la distance minimale entre deux points se déplaçant uniquement sur des rayons émanant de l'origine et des cercles centrés sur l'origine.
Explication de la prémisse
Imaginons maintenant que nous soyons dans un avion, et sur cet avion, nous ne sommes autorisés à voyager que de manière spéciale. Nous sommes autorisés à voyager sur n'importe quel rayon émanant de l'origine.
Nous pouvons également voyager sur n'importe quel cercle centré sur un cercle
Maintenant, notre objectif est de voyager d'un point sur cet avion à un autre. Cependant, nous ne pouvons pas simplement voyager dans un simple chemin euclidien, nous ne pouvons le faire que si les points tombent sur un rayon émanant du centre.
Nous pouvons voyager sur celui-ci car il tombe sur l'un de nos rayons.
On peut aussi voyager sur des cercles centrés à l'origine.
Exemples
Voici maintenant le défi:
Nous devons aller d'un point à un autre sur le chemin le plus court; c'est souvent une combinaison de voyages sur des cercles et des rayons.
Cependant, il pourrait également se déplacer sur deux rayons.
Parfois, il existe deux chemins qui parcourent la distance minimale.
Problème
Votre défi est d'écrire un programme qui, lorsque deux points vous seront donnés, nous donnera la distance minimale entre eux si nous suivons ces règles. Les entrées peuvent être données sous forme rectangulaire ou polaire et la sortie doit être un nombre, la distance entre les deux.
Cas de test
(avec entrée rectangulaire)
(1,1) (1,-1) -> ~ 2.22144
(0,0) (1, 1) -> ~ 1.41421
(1,0) (-0.4161 , 0.90929) -> ~ 2
(1,1) (1, 0) -> ~ 1.19961
(1,2) (3, 4) -> ~ 3.16609