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:
- The angle subtended by an edge on the center of n sided regular polygon is 360/n.
- The angle subtended by vertices separated by k edges becomes (360*k)/n.
- 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.
- Let the angle obtained in this manner be a = (180*x)/n where k is number of edges between i and k.
- 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.
- The angle between the three vertices thus equals 180-a-b.
Below is the implementation of the above approach:
// 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 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 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# 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
<script>
// JavaScript implementation of the approach
// Function that checks whether given angle
// can be created using any 3 sides
function calculate_angle(n , i, j , k)
{
// Initialize x and y
var 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
var ang1 = (180 * x) / n;
var 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
var ans = 180 - ang1 - ang2;
return ans;
}
// Driver code
var n = 5;
var a1 = 1;
var a2 = 2;
var a3 = 5;
document.write(parseInt(calculate_angle(n, a1, a2, a3)));
// This code is contributed by 29AjayKumar
</script>
Output:
36
Time Complexity: O(1)
Auxiliary Space: O(1)