GeeksforGeeks App
Open App
Browser
Continue

# Find N random points within a Circle

Given four integers N, R, X, and Y such that it represents a circle of radius R with [X, Y] as coordinates of the center. The task is to find N random points inside or on the circle.
Examples:

Input: R = 12, X = 3, Y = 3, N = 5
Output: (7.05, -3.36) (5.21, -7.49) (7.53, 0.19) (-2.37, 12.05) (1.45, 11.80)
Input: R = 5, X = 1, Y = 1, N = 3
Output: (4.75, 1.03) (2.57, 5.21) (-1.98, -0.76)

Approach: To find a random point in or on a circle we need two components, an angle(theta) and distance(D) from the center. After that Now, the point (xi, yi) can be expressed as:

```xi = X + D * cos(theta)
yi = Y + D * sin(theta)```

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;``#define PI 3.141592653589` `// Return a random double between 0 & 1``double` `uniform()``{``    ``return` `(``double``)``rand``() / RAND_MAX;``}` `// Function to find the N random points on``// the given circle``vector > randPoint(``    ``int` `r, ``int` `x, ``int` `y, ``int` `n)``{``    ``// Result vector``    ``vector > res;` `    ``for` `(``int` `i = 0; i < n; i++) {` `        ``// Get Angle in radians``        ``double` `theta = 2 * PI * uniform();` `        ``// Get length from center``        ``double` `len = ``sqrt``(uniform()) * r;` `        ``// Add point to results.``        ``res.push_back({ x + len * ``cos``(theta),``                        ``y + len * ``sin``(theta) });``    ``}` `    ``// Return the N points``    ``return` `res;``}` `// Function to display the content of``// the vector A``void` `printVector(``    ``vector > A)``{` `    ``// Iterate over A``    ``for` `(pair<``double``, ``double``> P : A) {` `        ``// Print the N random points stored``        ``printf``(``"(%.2lf, %.2lf)\n"``,``               ``P.first, P.second);``    ``}``}` `// Driver Code``int` `main()``{``    ``// Given dimensions``    ``int` `R = 12;``    ``int` `X = 3;``    ``int` `Y = 3;``    ``int` `N = 5;` `    ``// Function Call``    ``printVector(randPoint(R, X, Y, N));``    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.*;` `class` `GFG{``    ` `static` `final` `double` `PI = ``3.141592653589``;``static` `class` `pair``{``    ``double` `first, second;` `    ``public` `pair(``double` `first,``                ``double` `second)``    ``{``        ``super``();``        ``this``.first = first;``        ``this``.second = second;``    ``}``}` `// Return a random double between 0 & 1``static` `double` `uniform(){``return` `Math.random();}` `// Function to find the N random points on``// the given circle``static` `Vector randPoint(``int` `r, ``int` `x,``                              ``int` `y, ``int` `n)``{``    ` `    ``// Result vector``    ``Vector res = ``new` `Vector();` `    ``for``(``int` `i = ``0``; i < n; i++)``    ``{``        ` `        ``// Get Angle in radians``        ``double` `theta = ``2` `* PI * uniform();` `        ``// Get length from center``        ``double` `len = Math.sqrt(uniform()) * r;` `        ``// Add point to results.``        ``res.add(``new` `pair(x + len * Math.cos(theta),``                         ``y + len * Math.sin(theta)));``    ``}``    ` `    ``// Return the N points``    ``return` `res;``}` `// Function to display the content of``// the vector A``static` `void` `printVector(Vector A)``{` `    ``// Iterate over A``    ``for``(pair P : A)``    ``{``        ` `        ``// Print the N random points stored``        ``System.out.printf(``"(%.2f, %.2f)\n"``,``                          ``P.first, P.second);``    ``}``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ` `    ``// Given dimensions``    ``int` `R = ``12``;``    ``int` `X = ``3``;``    ``int` `Y = ``3``;``    ``int` `N = ``5``;` `    ``// Function call``    ``printVector(randPoint(R, X, Y, N));``}``}` `// This code is contributed by Rajput-Ji`

## Python3

 `# Python program for the above approach``import` `math``import` `random``PI ``=` `3.141592653589``;` `class` `pair:` `    ``def` `__init__(``self``, first, second):``        ``self``.first ``=` `first;``        ``self``.second ``=` `second;` `# Return a random between 0 & 1``def` `uniform():``    ``return` `random.random();` `# Function to find the N random points on``# the given circle``def` `randPoint(r, x, y, n):``  ` `    ``# Result vector``    ``res ``=` `list``();` `    ``for` `i ``in` `range``(n):``        ``# Get Angle in radians``        ``theta ``=` `2` `*` `PI ``*` `uniform();` `        ``# Get length from center``        ``len` `=` `math.sqrt(uniform()) ``*` `r;` `        ``# Add point to results.``        ``res.append(pair((x ``+` `len` `*` `math.cos(theta)), (y ``+` `len` `*` `math.sin(theta))));` `    ``# Return the N points``    ``return` `res;` `# Function to display the content of``# the vector A``def` `printVector(A):` `    ``# Iterate over A``    ``for` `P ``in` `A:``        ``# Print the N random points stored``        ``print``(``"({0:.2f}"``.``format``(P.first),``", "``,``"{0:.2f})"``.``format``(P.second));` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``# Given dimensions``    ``R ``=` `12``;``    ``X ``=` `3``;``    ``Y ``=` `3``;``    ``N ``=` `5``;` `    ``# Function call``    ``printVector(randPoint(R, X, Y, N));` `# This code is contributed by 29AjayKumar`

## C#

 `// C# program for the above approach``using` `System;``using` `System.Collections.Generic;``class` `GFG``{``    ` `static` `readonly` `double` `PI = 3.141592653589;``class` `pair``{``    ``public` `double` `first, second;` `    ``public` `pair(``double` `first,``                ``double` `second)``    ``{``        ``this``.first = first;``        ``this``.second = second;``    ``}``}` `// Return a random double between 0 & 1``static` `double` `uniform()``{``    ``return` `new` `Random().NextDouble();``}` `// Function to find the N random points on``// the given circle``static` `List randPoint(``int` `r, ``int` `x,``                              ``int` `y, ``int` `n)``{``    ` `    ``// Result vector``    ``List res = ``new` `List();``    ``for``(``int` `i = 0; i < n; i++)``    ``{``        ` `        ``// Get Angle in radians``        ``double` `theta = 2 * PI * uniform();` `        ``// Get length from center``        ``double` `len = Math.Sqrt(uniform()) * r;` `        ``// Add point to results.``        ``res.Add(``new` `pair(x + len * Math.Cos(theta),``                         ``y + len * Math.Sin(theta)));``    ``}``    ` `    ``// Return the N points``    ``return` `res;``}` `// Function to display the content of``// the vector A``static` `void` `printList(List A)``{` `    ``// Iterate over A``    ``foreach``(pair P ``in` `A)``    ``{``        ` `        ``// Print the N random points stored``        ``Console.Write(``"({0:F2}, {1:F2})\n"``,``                          ``P.first, P.second);``    ``}``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ` `    ``// Given dimensions``    ``int` `R = 12;``    ``int` `X = 3;``    ``int` `Y = 3;``    ``int` `N = 5;` `    ``// Function call``    ``printList(randPoint(R, X, Y, N));``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 `// JavaScript program for the above approach` `// Return a random double between 0 & 1``function` `uniform()``{``    ``return` `Math.random();``}` `// Function to find the N random points on``// the given circle``function` `randPoint(r, x, y, n)``{``    ``// Result vector``    ``let res = ``new` `Array();` `    ``for` `(let i = 0; i < n; i++) {` `        ``// Get Angle in radians``        ``let theta = 2 * Math.PI * uniform();` `        ``// Get length from center``        ``let len = Math.sqrt(uniform()) * r;` `        ``// Add point to results.``        ``res.push([x + len * Math.cos(theta), y + len * Math.sin(theta)]);``    ``}` `    ``// Return the N points``    ``return` `res;``}` `// Function to display the content of``// the vector A``function` `printVector(A)``{``    ``// Iterate over A``    ``for` `(let i = 0; i < A.length; i++) {      ``        ``// Print the N random points stored``        ``console.log(``"("` `+ A[i][0].toFixed(2) + ``", "` `+ A[i][1].toFixed(2) + ``")"``);``    ``}``}` `// Driver Code``// Given dimensions``let R = 12;``let X = 3;``let Y = 3;``let N = 5;` `// Function Call``printVector(randPoint(R, X, Y, N));` `// The code is contributed by gautam goel (gautamgoel962)`

Output:

```(7.05, -3.36)
(5.21, -7.49)
(7.53, 0.19)
(-2.37, 12.05)
(1.45, 11.80)```

Time Complexity: O(N)
Space Complexity: O(N)

My Personal Notes arrow_drop_up