Encuentra la distancia máxima y mínima entre imanes

Dadas las coordenadas de dos puntos de pivote (x0, y0) y (x1, y1) en el plano de coordenadas. Junto a cada pivote, se atan dos imanes diferentes con la ayuda de una cuerda de longitud r1 y r2 respectivamente. Encuentra la distancia entre ambos imanes cuando se repelen y cuando se atraen.

Ejemplos:  

Entrada: x1=0, y1=0, x2=5, y2=0, r1=2, r2=2 
Salida: Distancia mientras repulsión = 9, Distancia mientras atracción = 1

Entrada: x1=0, y1=0, x2=5, y2=0, r1=3, r2=3 
Salida: Distancia mientras repulsión = 11, Distancia mientras atracción = 0 
 

Como todos sabemos acerca de las propiedades del imán, se repelen entre sí cuando están enfrentados con el mismo polo y se atraen cuando están enfrentados con el polo opuesto. Además, la fuerza de atracción, así como la de repulsión, siempre actúan en línea recta.

Tenemos dos puntos de pivote en las coordenadas, por lo que la distancia entre estos puntos es D = ((x1-x2) 2 +(y1-y2) 2 ) 1/2
Además, podemos concluir que la distancia entre imanes es máxima durante la repulsión y que también debería ser la distancia entre pivotes + la suma de la longitud de ambas cuerdas. 

En caso de atracción, tenemos que cuidar dos casos: 
la distancia mínima es la distancia entre los pivotes: la suma de la longitud de ambas cuerdas 
o la distancia mínima debe ser cero en caso de que la suma de la longitud de las cuerdas sea mayor que la distancia entre los puntos de pivote.
Ilustración con ayuda del diagrama: 
 

C++

// C++ program for max and min distance
#include <bits/stdc++.h>
using namespace std;
 
// Function for finding distance between pivots
int pivotDis(int x0, int y0, int x1, int y1)
{
    return sqrt((x1 - x0) * (x1 - x0) +
                (y1 - y0) * (y1 - y0));
}
 
// Function for minimum distance
int minDis(int D, int r1, int r2)
{
    return max((D - r1 - r2), 0);
}
 
// Function for maximum distance
int maxDis(int D, int r1, int r2)
{
    return D + r1 + r2;
}
 
// Drivers code
int main()
{
    int x0 = 0, y0 = 0, x1 = 8, y1 = 0, r1 = 4, r2 = 5;
    int D = pivotDis(x0, y0, x1, y1);
    cout << "Distance while repulsion = " << maxDis(D, r1, r2);
    cout << "\nDistance while attraction = " << minDis(D, r1, r2);
    return 0;
}

Java

// Java program for max
// and min distance
import java.io.*;
 
class GFG
{
     
// Function for finding
// distance between pivots
static int pivotDis(int x0, int y0,
                    int x1, int y1)
{
    return (int)Math.sqrt((x1 - x0) *
                          (x1 - x0) +
                          (y1 - y0) *
                          (y1 - y0));
}
 
// Function for
// minimum distance
static int minDis(int D, int r1, int r2)
{
    return Math.max((D - r1 - r2), 0);
}
 
// Function for
// maximum distance
static int maxDis(int D, int r1, int r2)
{
    return D + r1 + r2;
}
 
// Driver Code
public static void main (String[] args)
{
int x0 = 0, y0 = 0, x1 = 8,
    y1 = 0, r1 = 4, r2 = 5;
int D = pivotDis(x0, y0, x1, y1);
System.out.print( "Distance while " +
                     "repulsion = " +
                  maxDis(D, r1, r2));
System.out.print("\nDistance while " +
                     "attraction = " +
                   minDis(D, r1, r2));
}
}
 
// This code is contributed by anuj_67.

Python3

# Python 3 program for max and min
# distance
import math
 
# Function for finding distance between
# pivots
def pivotDis(x0, y0, x1, y1):
 
    return math.sqrt((x1 - x0) * (x1 - x0)
                  + (y1 - y0) * (y1 - y0))
 
# Function for minimum distance
def minDis( D, r1, r2):
 
    return max((D - r1 - r2), 0)
 
# Function for maximum distance
def maxDis( D, r1, r2):
 
    return D + r1 + r2
 
# Drivers code
x0 = 0
y0 = 0
x1 = 8
y1 = 0
r1 = 4
r2 = 5
D = pivotDis(x0, y0, x1, y1)
print("Distance while repulsion = ",
               int(maxDis(D, r1, r2)))
                
print("Distance while attraction = ",
                    minDis(D, r1, r2))
 
# This code is contributed by Smitha

C#

// C# program for max and min distance
using System;
 
class GFG {
     
    // Function for finding
    // distance between pivots
    static int pivotDis(int x0, int y0,
                        int x1, int y1)
    {
        return (int)Math.Sqrt((x1 - x0) *
                              (x1 - x0) +
                              (y1 - y0) *
                              (y1 - y0));
    }
     
    // Function for
    // minimum distance
    static int minDis(int D, int r1, int r2)
    {
        return Math.Max((D - r1 - r2), 0);
    }
     
    // Function for
    // maximum distance
    static int maxDis(int D, int r1, int r2)
    {
        return D + r1 + r2;
    }
     
    // Driver Code
    public static void Main ()
    {
    int x0 = 0, y0 = 0, x1 = 8,
        y1 = 0, r1 = 4, r2 = 5;
    int D = pivotDis(x0, y0, x1, y1);
     
    Console.WriteLine( "Distance while " +
                          "repulsion = " +
                       maxDis(D, r1, r2));
    Console.WriteLine("Distance while " +
                        "attraction = " +
                      minDis(D, r1, r2));
    }
}
 
// This code is contributed by anuj_67.

PHP

<?php
// PHP program for max and
// min distance
 
// Function for finding
// distance between pivots
function pivotDis($x0, $y0,
                  $x1, $y1)
{
    return sqrt(($x1 - $x0) *
                ($x1 - $x0) +
                ($y1 - $y0) *
                ($y1 - $y0));
}
 
// Function for minimum distance
function minDis( $D, $r1, $r2)
{
    return max(($D - $r1 - $r2), 0);
}
 
// Function for maximum distance
function maxDis( $D, $r1, $r2)
{
    return $D + $r1 + $r2;
}
 
    // Driver code
    $x0 = 0; $y0 = 0;
    $x1 = 8; $y1 = 0;
    $r1 = 4; $r2 = 5;
    $D = pivotDis($x0, $y0,
                  $x1, $y1);
    echo "Distance while repulsion = "
              , maxDis($D, $r1, $r2);
    echo "\nDistance while attraction = "
               , minDis($D, $r1, $r2);
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
 
// Javascript program for max and min distance
 
// Function for finding distance between pivots
function pivotDis(x0, y0, x1, y1)
{
    return Math.sqrt((x1 - x0) * (x1 - x0) +
                     (y1 - y0) * (y1 - y0));
}
 
// Function for minimum distance
function minDis(D, r1, r2)
{
    return Math.max((D - r1 - r2), 0);
}
 
// Function for maximum distance
function maxDis(D, r1,  r2)
{
    return D + r1 + r2;
}
 
// Driver code
let x0 = 0, y0 = 0, x1 = 8,
    y1 = 0, r1 = 4, r2 = 5;
let D = pivotDis(x0, y0, x1, y1);
 
document.write("Distance while repulsion = " +
               maxDis(D, r1, r2) + "</br>");
document.write("Distance while attraction = " +
               minDis(D, r1, r2));
                
// This code is contributed by jana_sayantan 
     
</script>
Producción: 

Distance while repulsion = 17
Distance while attraction = 0

 

Publicación traducida automáticamente

Artículo escrito por Shivam.Pradhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *