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 <bits/stdc++.h>using namespace std;#define PI 3.141592653589// Return a random double between 0 & 1double uniform(){ return (double)rand() / RAND_MAX;}// Function to find the N random points on// the given circlevector<pair<double, double> > randPoint( int r, int x, int y, int n){ // Result vector vector<pair<double, double> > 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 Avoid printVector( vector<pair<double, double> > 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 Codeint 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 approachimport 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 & 1static double uniform(){return Math.random();}// Function to find the N random points on// the given circlestatic Vector<pair> randPoint(int r, int x, int y, int n){ // Result vector Vector<pair> res = new Vector<pair>(); 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 Astatic void printVector(Vector<pair> 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 Codepublic 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 approachimport mathimport randomPI = 3.141592653589;class pair: def __init__(self, first, second): self.first = first; self.second = second;# Return a random between 0 & 1def uniform(): return random.random();# Function to find the N random points on# the given circledef 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 Adef 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 Codeif __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 approachusing 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 & 1static double uniform(){ return new Random().NextDouble();}// Function to find the N random points on// the given circlestatic List<pair> randPoint(int r, int x, int y, int n){ // Result vector List<pair> res = new List<pair>(); 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 Astatic void printList(List<pair> 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 Codepublic 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 & 1function uniform(){ return Math.random();}// Function to find the N random points on// the given circlefunction 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 Afunction 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 dimensionslet R = 12;let X = 3;let Y = 3;let N = 5;// Function CallprintVector(randPoint(R, X, Y, N));// The code is contributed by gautam goel (gautamgoel962) |
(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)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Read More on that Topic: geeksforgeeks.org/find-n-random-points-within-a-circle/ […]