Puntos de círculo y celosía

Dado un círculo de radio r en 2-D con origen o (0, 0) como centro. La tarea es encontrar los puntos de red totales en la circunferencia. Los puntos de celosía son puntos con coordenadas como números enteros en el espacio 2-D.
Ejemplo: 
 

Input  : r = 5.
Output : 12
Below are lattice points on a circle with
radius 5 and origin as (0, 0).
(0,5), (0,-5), (5,0), (-5,0),
(3,4), (-3,4), (-3,-4), (3,-4),
(4,3), (-4,3), (-4,-3), (4,-3).
are 12 lattice point.

Para encontrar puntos de red, básicamente necesitamos encontrar valores de (x, y) que satisfagan la ecuación x 2 + y 2 = r 2
Para cualquier valor de (x, y) que satisfaga la ecuación anterior, en realidad tenemos un total de 4 combinaciones diferentes que satisfacen la ecuación. Por ejemplo, si r = 5 y (3, 4) es un par que satisface la ecuación, en realidad hay 4 combinaciones (3, 4) , (-3,4) , (-3,-4) , (3,- 4). Sin embargo, hay una excepción, en el caso de (0, r) o (r, 0) en realidad hay 2 puntos ya que no hay un 0 negativo.
 

// Initialize result as 4 for (r, 0), (-r. 0),
// (0, r) and (0, -r)
result = 4

Loop for x = 1 to r-1 and do following for every x.
    If r*r - x*x is a perfect square, then add 4 
    tor result.  

A continuación se muestra la implementación de la idea anterior. 
 

CPP

// C++ program to find countLattice points on a circle
#include<bits/stdc++.h>
using namespace std;
 
// Function to count Lattice points on a circle
int countLattice(int r)
{
    if (r <= 0)
        return 0;
 
    // Initialize result as 4 for (r, 0), (-r. 0),
    // (0, r) and (0, -r)
    int result = 4;
 
    // Check every value that can be potential x
    for (int x=1; x<r; x++)
    {
        // Find a potential y
        int ySquare = r*r - x*x;
        int y = sqrt(ySquare);
 
        // checking whether square root is an integer
        // or not. Count increments by 4 for four
        // different quadrant values
        if (y*y == ySquare)
            result += 4;
    }
 
    return result;
}
 
// Driver program
int main()
{
    int r = 5;
    cout << countLattice(r);
    return 0;
}

Java

// Java program to find
// countLattice points on a circle
 
class GFG
{
 
// Function to count
// Lattice points on a circle
static int countLattice(int r)
{
    if (r <= 0)
        return 0;
  
    // Initialize result as 4 for (r, 0), (-r. 0),
    // (0, r) and (0, -r)
    int result = 4;
  
    // Check every value that can be potential x
    for (int x=1; x<r; x++)
    {
        // Find a potential y
        int ySquare = r*r - x*x;
        int y = (int)Math.sqrt(ySquare);
  
        // checking whether square root is an integer
        // or not. Count increments by 4 for four
        // different quadrant values
        if (y*y == ySquare)
            result += 4;
    }
  
    return result;
}
 
// Driver code
public static void main(String arg[])
{
    int r = 5;
    System.out.println(countLattice(r));
}
}
// This code is contributed by Anant Agarwal.

Python3

# Python3 program to find
# countLattice points on a circle
 
import math
 
# Function to count Lattice
# points on a circle
def countLattice(r):
 
    if (r <= 0):
        return 0 
 
    # Initialize result as 4 for (r, 0), (-r. 0),
    # (0, r) and (0, -r)
    result = 4
 
    # Check every value that can be potential x
    for x in range(1, r):
     
        # Find a potential y
        ySquare = r*r - x*x
        y = int(math.sqrt(ySquare))
 
        # checking whether square root is an integer
        # or not. Count increments by 4 for four
        # different quadrant values
        if (y*y == ySquare):
            result += 4
      
 
    return result
  
 
# Driver program
r = 5
print(countLattice(r))
 
# This code is contributed by
# Smitha Dinesh Semwal

C#

// C# program to find countLattice
// points on a circle
using System;
 
class GFG {
 
    // Function to count Lattice
    // points on a circle
    static int countLattice(int r)
    {
        if (r <= 0)
            return 0;
     
        // Initialize result as 4
        // for (r, 0), (-r. 0),
        // (0, r) and (0, -r)
        int result = 4;
     
        // Check every value that
        // can be potential x
        for (int x = 1; x < r; x++)
        {
             
            // Find a potential y
            int ySquare = r*r - x*x;
            int y = (int)Math.Sqrt(ySquare);
     
            // checking whether square root
            // is an integer or not. Count
            // increments by 4 for four
            // different quadrant values
            if (y*y == ySquare)
                result += 4;
        }
     
        return result;
    }
     
    // Driver code
    public static void Main()
    {
        int r = 5;
         
        Console.Write(countLattice(r));
    }
}
 
// This code is contributed by nitin mittal.

PHP

<?php
// PHP program to find countLattice
// points on a circle
 
// Function to count Lattice
// points on a circle
function countLattice($r)
{
    if ($r <= 0)
        return 0;
 
    // Initialize result as 4
    // for (r, 0), (-r. 0),
    // (0, r) and (0, -r)
    $result = 4;
 
    // Check every value that
    // can be potential x
    for ($x = 1; $x < $r; $x++)
    {
         
        // Find a potential y
        $ySquare = $r * $r - $x * $x;
        $y = ceil(sqrt($ySquare));
 
        // checking whether square
        // root is an integer
        // or not. Count increments
        // by 4 for four different
        // quadrant values
        if ($y * $y == $ySquare)
            $result += 4;
    }
 
    return $result;
}
 
    // Driver Code
    $r = 5;
    echo countLattice($r);
 
// This code is contributed by nitin mittal
?>

Javascript

<script>
// javascript program to find
// countLattice points on a circle
 
    // Function to count
    // Lattice points on a circle
    function countLattice(r) {
        if (r <= 0)
            return 0;
 
        // Initialize result as 4 for (r, 0), (-r. 0),
        // (0, r) and (0, -r)
        var result = 4;
 
        // Check every value that can be potential x
        for (x = 1; x < r; x++)
        {
         
            // Find a potential y
            var ySquare = r * r - x * x;
            var y = parseInt( Math.sqrt(ySquare));
 
            // checking whether square root is an integer
            // or not. Count increments by 4 for four
            // different quadrant values
            if (y * y == ySquare)
                result += 4;
        }
 
        return result;
    }
 
    // Driver code
        var r = 5;
        document.write(countLattice(r));
 
// This code is contributed by umadevi9616
</script>

Producción: 
 

12

Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)

Referencia:  
http://mathworld.wolfram.com/CircleLatticePoints.html
Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *