#include <bits/stdc++.h>
using namespace std;
struct Point
{
double x, y;
Point(double x = 0, double y = 0): x(x), y(y) { }
};
typedef Point Vector;
Vector operator + (const Vector& A, const Vector& B) { return Vector(A.x + B.x, A.y + B.y); }
Vector operator - (const Point& A, const Point& B) { return Vector(A.x - B.x, A.y - B.y); }
double Dot(const Vector& A, const Vector& B) { return A.x * B.x + A.y * B.y; }
double Length(const Vector& A) { return sqrt(Dot(A, A)); }
Point read_point()
{
double x, y;
scanf("%lf%lf", &x, &y);
return Point(x, y);
}
const double PI = acos(-1.0);
Point A, B;
int n;
int main(int argc, char const *argv[])
{
while (true)
{
A = read_point();
B = read_point();
scanf("%d", &n);
if (!n) break;
double r = Length(A - B) / 2;
if (n & 1) r /= sin(2 * PI * (n / 2) / (2 * n));
double ans = r * r * sin(PI * 2 / n) * n / 2;
printf("%.6lf\n", ans);
}
return 0;
}
面积最小必然是最长的连线啦,那么必然是1和n/2两点,求出多边形核到各个顶点的r后,正弦公式算面积就可以了。
如果是奇数边形,距离不是2r而是2倍直角边,勾股处理一下就好。