Angle between 3 given vertices in a nsided regular polygon (original) (raw)

Last Updated : 13 Mar, 2022

Given a n-sided regular polygon and three vertices a1, a2 and a3, the task is to find the angle suspended at vertex a1 by vertex a2 and vertex a3.

Examples:

Input: n = 6, a1 = 1, a2 = 2, a3 = 4 Output: 90

Input: n = 5, a1 = 1, a2 = 2, a3 = 5 Output: 36

Approach:

  1. The angle subtended by an edge on the center of n sided regular polygon is 360/n.
  2. The angle subtended by vertices separated by k edges becomes (360*k)/n.
  3. The chord between the vertices subtends an angle with half the value of the angle subtended at the center at the third vertex which is a point on the circumference on the circumcircle.
  4. Let the angle obtained in this manner be a = (180*x)/n where k is number of edges between i and k.
  5. Similarly for the opposite vertex we get the angle to be b = (180*y)/n where l is number of edges between j and k.
  6. The angle between the three vertices thus equals 180-a-b.

Below is the implementation of the above approach:

C++ `

// C++ implementation of the approach

#include <bits/stdc++.h> using namespace std;

// Function that checks whether given angle // can be created using any 3 sides double calculate_angle(int n, int i, int j, int k) { // Initialize x and y int x, y;

// Calculate the number of vertices
// between i and j, j and k
if (i < j)
    x = j - i;
else
    x = j + n - i;
if (j < k)
    y = k - j;
else
    y = k + n - j;

// Calculate the angle subtended
// at the circumference
double ang1 = (180 * x) / n;
double ang2 = (180 * y) / n;

// Angle subtended at j can be found
// using the fact that the sum of angles
// of a triangle is equal to 180 degrees
double ans = 180 - ang1 - ang2;
return ans;

}

// Driver code int main() { int n = 5; int a1 = 1; int a2 = 2; int a3 = 5;

cout << calculate_angle(n, a1, a2, a3);

return 0;

}

Java

// Java implementation of the approach class GFG {

// Function that checks whether given angle // can be created using any 3 sides static double calculate_angle(int n, int i, int j, int k) { // Initialize x and y int x, y;

// Calculate the number of vertices
// between i and j, j and k
if (i < j)
    x = j - i;
else
    x = j + n - i;
if (j < k)
    y = k - j;
else
    y = k + n - j;

// Calculate the angle subtended
// at the circumference
double ang1 = (180 * x) / n;
double ang2 = (180 * y) / n;

// Angle subtended at j can be found
// using the fact that the sum of angles
// of a triangle is equal to 180 degrees
double ans = 180 - ang1 - ang2;
return ans;

}

// Driver code public static void main (String[] args) { int n = 5; int a1 = 1; int a2 = 2; int a3 = 5;

System.out.println((int)calculate_angle(n, a1, a2, a3));

} }

// This code is contributed by Rajput-Ji

Python3

Python3 implementation of the approach

Function that checks whether given angle

can be created using any 3 sides

def calculate_angle(n, i, j, k):

# Initialize x and y
x, y = 0, 0

# Calculate the number of vertices
# between i and j, j and k
if (i < j):
    x = j - i
else:
    x = j + n - i
if (j < k):
    y = k - j
else:
    y = k + n - j

# Calculate the angle subtended
# at the circumference
ang1 = (180 * x) // n
ang2 = (180 * y) // n

# Angle subtended at j can be found
# using the fact that the sum of angles
# of a triangle is equal to 180 degrees
ans = 180 - ang1 - ang2
return ans

Driver code

n = 5 a1 = 1 a2 = 2 a3 = 5

print(calculate_angle(n, a1, a2, a3))

This code is contributed by Mohit Kumar

C#

// C# implementation of the approach using System;

class GFG {

// Function that checks whether given angle // can be created using any 3 sides static double calculate_angle(int n, int i, int j, int k) { // Initialize x and y int x, y;

// Calculate the number of vertices
// between i and j, j and k
if (i < j)
    x = j - i;
else
    x = j + n - i;
if (j < k)
    y = k - j;
else
    y = k + n - j;

// Calculate the angle subtended
// at the circumference
double ang1 = (180 * x) / n;
double ang2 = (180 * y) / n;

// Angle subtended at j can be found
// using the fact that the sum of angles
// of a triangle is equal to 180 degrees
double ans = 180 - ang1 - ang2;
return ans;

}

// Driver code public static void Main () { int n = 5; int a1 = 1; int a2 = 2; int a3 = 5;

Console.WriteLine((int)calculate_angle(n, a1, a2, a3));

} }

// This code is contributed by ihritik

JavaScript

`

Time Complexity: O(1)

Auxiliary Space: O(1)