Generate all integral points lying inside a rectangle

• Last Updated : 22 Oct, 2020

Given a rectangle of length L, and width, W, the task is to generate all integral coordinates (X, Y) that lie within a rectangle pf dimensions L * W having one of its vertexes in the origin (0, 0).

Examples:

Input: L = 3, W = 2
Output: (0, 0) (0, 1) (1, 0) (1, 1) (2, 0) (2, 1)
Explanation: Total number of integral coordinates existing within the rectangle are L × W = 6. Therefore, the output is (0, 0) (0, 1) (1, 0) (1, 1) (2, 0) (2, 1).

Input: L = 5, W = 3
Output: (0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) (2, 0) (2, 1) (2, 2) (3, 0) (3, 1) (3, 2) (4, 0) (4, 1) (4, 2)

Approach: The problem can be solved by generating all integral numbers from the range 0 to L for X-coordinates and from 0 to W for Y-coordinates using the rand() function. Follow the steps below to solve the problem:

1. Create a set of pairs to store all the coordinates(X, Y) that lie within the rectangle.
2. Use the equation rand() % L to generate all the integers lying between 0 to L and rand() % W to generate all the integers lying between 0 to W.
3. Print all possible L × W coordinates (X, Y) that lie within the rectangle.

Below is the implementation of the above approach:

C++

 // C++ program to implement// the above approach#include using namespace std; // Function to generate coordinates// lying within the rectanglevoid generatePoints(int L, int W){    // Store all possible coordinates    // that lie within the rectangle    set > hash;     // Stores the number of possible    // coordinates that lie within    // the rectangle    int total = (L * W);     // Use current time as seed    // for random generator    srand(time(0));     // Generate all possible    // coordinates    while (total--) {        // Generate all possible        // X-coordinates        int X = rand() % L;         // Generate all possible        // Y-coordinates        int Y = rand() % W;         // If coordinates(X, Y) has        // not been generated already        while (hash.count({ X, Y })) {            X = rand() % L;            Y = rand() % W;        }         // Insert the coordinates(X, Y)        hash.insert({ X, Y });    }     // Print the coordinates    for (auto points : hash) {        cout << "(" << points.first << ", "             << points.second << ") ";    }} // Driver Codeint main(){    // Rectangle dimensions    int L = 3, W = 2;     generatePoints(L, W);}

Python3

 # Python3 program to implement# the above approachimport timeimport random random.seed(time.time()) # Function to generate coordinates# lying within the rectangledef generatePoints(L, W):         # Store all possible coordinates    # that lie within the rectangle    hash = {}     # Stores the number of possible    # coordinates that lie within    # the rectangle    total = (L * W)     # Generate all possible    # coordinates    for i in range(total):                 # Generate all possible        # X-coordinates        X = random.randint(0, L) % L         # Generate all possible        # Y-coordinates        Y = random.randint(0, W) % W         # If coordinates(X, Y) has        # not been generated already        while ((X, Y) in hash):            X = random.randint(0, L) % L            Y = random.randint(0, W) % W         # Insert the coordinates(X, Y)        hash[(X, Y)] = 1     # Print the coordinates    for points in sorted(hash):        print("(", points,             ", ", points,             ") ", end = "") # Driver codeif __name__ == '__main__':         # Rectangle dimensions    L, W = 3, 2     generatePoints(L, W) # This code is contributed by mohit kumar 29

C#

 // C# program to implement// the above approachusing System;using System.Collections;using System.Collections.Generic; class GFG{ public class store : IComparer>{    public int Compare(KeyValuePair x,                       KeyValuePair y)    {        if (x.Key != y.Key)        {            return x.Key.CompareTo(y.Key);           }        else        {            return x.Value.CompareTo(y.Value);           }    }}      // Function to generate coordinates// lying within the rectanglestatic void generatePoints(int L, int W){         // Store all possible coordinates    // that lie within the rectangle    SortedSet> hash = new SortedSet>(new store());      // Stores the number of possible    // coordinates that lie within    // the rectangle    int total = (L * W);      // For random generator    Random rand = new Random();      // Generate all possible    // coordinates    while ((total--) != 0)    {                 // Generate all possible        // X-coordinates        int X = rand.Next() % L;          // Generate all possible        // Y-coordinates        int Y = rand.Next() % W;          // If coordinates(X, Y) has        // not been generated already        while (hash.Contains(            new KeyValuePair(X, Y)))        {            X = rand.Next() % L;            Y = rand.Next() % W;        }          // Insert the coordinates(X, Y)        hash.Add(new KeyValuePair(X, Y));    }      // Print the coordinates    foreach(KeyValuePair x in hash)    {        Console.Write("(" + x.Key + ", " +                          x.Value + ") ");    }} // Driver Codepublic static void Main(string[] args){         // Rectangle dimensions    int L = 3, W = 2;      generatePoints(L, W);}} // This code is contributed by rutvik_56
Output:
(0, 0) (0, 1) (1, 0) (1, 1) (2, 0) (2, 1)

Time Complexity: O(L * W)
Auxiliary Space: O(L * W)

My Personal Notes arrow_drop_up