给定一个五角星形,它的内侧长度是(d)。任务是找出五角星的区域。五角星是五点星,是通过在五个直线段中画一条连续线而形成的。
例子:
Input: d = 5
Output: Area = 139.187
Area of regular pentagram = 139.187
Input: d = 7
Output: Area = 272.807
想法是在a / b,b / c和c / d之间使用黄金分割率,大约等于1.618
内边长度d给出为
c = 1.618 * d
b = 1.618 * c
a = 1.618 * b
AB,BC和CD相等(正五边形的两边)
因此,AB = BC = CD = c,而BD由d给出。
Area of pentgram = Area of Pentagon BDFHJ + 5 * (Area of triangle BCD)
Area of Pentagon BDFHJ = (d^2 * 5)/ (4* tan 36)
Area of triangle BCD = [s(s-d)(s-c)(s-c)]^(1/2) {Heron’s Formula}
where
s = (d + c + c)/2
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
#define PI 3.14159
using namespace std;
// Function to return the area of triangle BCD
double areaOfTriangle(float d)
{
// Using Golden ratio
float c = 1.618 * d;
float s = (d + c + c) / 2;
// Calculate area of triangle BCD
double area = sqrt(s * (s - c) *
(s - c) * (s - d));
// Return area of all 5 trianlge are same
return 5 * area;
}
// Function to return the area of regular pentagon
double areaOfRegPentagon(float d)
{
// Calculate the area of regular
// pentagon using above formula
double cal = 4 * tan(PI / 5);
double area = (5 * d * d) / cal;
// Return area of regular pentagon
return area;
}
// Function to return the area of pentagram
double areaOfPentagram(float d)
{
// Area of a pentagram is equal to the
// area of regular pentagon and five times
// the area of Triangle
return areaOfRegPentagon(d) +
areaOfTriangle(d);
}
// Driver code
int main()
{
float d = 5;
cout << areaOfPentagram(d) << endl;
return 0;
}
Java
// Java implemenation of above approach
public class GFG
{
static double PI = 3.14159;
// Function to return the area of triangle BCD
static double areaOfTriangle(float d)
{
// Using Golden ratio
float c = (float) (1.618 * d);
float s = (d + c + c) / 2;
// Calculate area of triangle BCD
double area = Math.sqrt(s * (s - c)
* (s - c) * (s - d));
// Return area of all 5 trianlge are same
return 5 * area;
}
// Function to return the area of regular pentagon
static double areaOfRegPentagon(float d)
{
// Calculate the area of regular
// pentagon using above formula
double cal = 4 * Math.tan(PI / 5);
double area = (5 * d * d) / cal;
// Return area of regular pentagon
return area;
}
// Function to return the area of pentagram
static double areaOfPentagram(float d)
{
// Area of a pentagram is equal to the
// area of regular pentagon and five times
// the area of Triangle
return areaOfRegPentagon(d)
+ areaOfTriangle(d);
}
// Driver code
public static void main(String[] args)
{
float d = 5;
System.out.println(areaOfPentagram(d));
}
}
// This code has been contributed by 29AjayKumar
Python
# Python3 implementation of the approach
import math
PI = 3.14159
# Function to return the area of triangle BCD
def areaOfTriangle(d) :
# Using Golden ratio
c = 1.618 * d
s = (d + c + c) / 2
# Calculate area of triangle BCD
area = math.sqrt(s * (s - c) *
(s - c) * (s - d))
# Return area of all 5 triangles are the same
return 5 * area
# Function to return the area of regular pentagon
def areaOfRegPentagon(d) :
global PI
# Calculate the area of regular
# pentagon using above formula
cal = 4 * math.tan(PI / 5)
area = (5 * d * d) / cal
# Return area of regular pentagon
return area
# Function to return the area of pentagram
def areaOfPentagram(d) :
# Area of a pentagram is equal to the
# area of regular pentagon and five times
# the area of Triangle
return areaOfRegPentagon(d) + areaOfTriangle(d)
# Driver code
d = 5
print(areaOfPentagram(d))
# This code is contributed by ihritik
C#
// C# implementation of the above approach
using System;
class GFG
{
static double PI = 3.14159;
// Function to return the area of triangle BCD
static double areaOfTriangle(float d)
{
// Using Golden ratio
float c = (float) (1.618 * d);
float s = (d + c + c) / 2;
// Calculate area of triangle BCD
double area = Math.Sqrt(s * (s - c)
* (s - c) * (s - d));
// Return area of all 5 trianlge are same
return 5 * area;
}
// Function to return the area of regular pentagon
static double areaOfRegPentagon(float d)
{
// Calculate the area of regular
// pentagon using above formula
double cal = 4 * Math.Tan(PI / 5);
double area = (5 * d * d) / cal;
// Return area of regular pentagon
return area;
}
// Function to return the area of pentagram
static double areaOfPentagram(float d)
{
// Area of a pentagram is equal to the
// area of regular pentagon and five times
// the area of Triangle
return areaOfRegPentagon(d)
+ areaOfTriangle(d);
}
// Driver code
public static void Main()
{
float d = 5;
Console.WriteLine(areaOfPentagram(d));
}
}
// This code has been contributed by ihritik
输出:
139.187
时间复杂度: O(1)