Monday, May 4, 2015

UVa 10432 - Polygon Inside A Circle

// UVa 10432 - Polygon Inside A Circle
// O(1)

#include <math.h>
#include <stdio.h>
using namespace std;

inline double poly_area_method1(double r, int n) {
	// using area = b*c*sin(alpha) and M_PI
	double angle = 2 * M_PI / n;
	double triangle_area = r * r * sin(angle) / 2;
	return triangle_area * n;
}

inline double poly_area_method2(double r, int n) {
	// using acos(-1) instead of M_PI
	double angle = 2 * acos(-1) / n;
	double triangle_area = r * r * sin(angle) / 2;
	return triangle_area * n;
}

inline double poly_area_method3(double r, int n) {
	// using area=b*h/2 and M_PI
	double angle = 2 * M_PI / n;
	double half_angle = angle / 2;
	double triangle_height = cos(half_angle) * r;
	double triangle_base = sin(half_angle) * r * 2;
	double triangle_area = triangle_height * triangle_base / 2;
	return triangle_area * n;
}

inline double poly_area_method4(double r, int n) {
	// using area=b*h/2 and acos(-1)
	double angle = 2 * acos(-1) / n;
	double half_angle = angle / 2;
	double triangle_height = cos(half_angle) * r;
	double triangle_base = sin(half_angle) * r * 2;
	double triangle_area = triangle_height * triangle_base / 2;
	return triangle_area * n;
}

int main() {
	int n;
	double r;
	while (scanf("%lf%d", &r, &n) != EOF) {
		printf("%.3f\n", poly_area_method1(r, n));
	}
	return 0;
}

No comments:

Post a Comment