zoukankan      html  css  js  c++  java
  • XV Open Cup named after E.V. Pankratiev. GP of Siberia-Swimming

    给出两个点,找到过这两个点的等角螺线,并求出中间的螺线长

    $c = frac{b}{a}$

    $p = a imes c^{frac{ heta}{angle}}$

    对弧线积分

    #include <bits/stdc++.h>
    using namespace std;
    long double eps = 1e-8;
    struct Point {
        long double x, y;
        Point(long double _x = 0, long double _y = 0) {
            x = _x; y = _y;
        } 
        Point operator - (const Point &b) {
            return Point(x - b.x, y - b.y);
        }
    }a[4];
    long double Dot(Point &a, Point b) {
        return a.x * b.x + a.y * b.y;
    }
    long double len(Point &a) {
        return sqrt(Dot(a, a));
    }
    int cmp(long double x) {
        if (fabs(x) < eps) return 0; return eps > 0? 1: -1;
    }
    int main() {
        for (int i = 1; i <= 3; ++ i) cin >> a[i].x >> a[i].y;
        a[1] = a[1] - a[3];
        a[2] = a[2] - a[3];
        long double tmp = Dot(a[1], a[2]);
        long double len1 = len(a[1]), len2 = len(a[2]);
        if (cmp(tmp - len1 * len2) == 0) {
            long double ans = fabs(len1 - len2);
            cout << fixed << setprecision(12) << ans << '
    ';
            return 0;
        }
        auto sqr = [&](long double x) -> long double {
            return x * x;
        };
        long double ang = acos(tmp / len1 / len2);
        long double ans = ang * len1;
        if (cmp(len1 - len2)) {
            long double C = len2 / len1;
            ans = (C - 1) / log(C) * ans; 
            ans = ans * sqrt(1 + sqr(log(C) / ang));
        }
        cout << fixed << setprecision(12) << ans << '
    ';
    }
  • 相关阅读:
    this指向
    this指向
    this指向
    this指向
    a=b=c 连等赋值的分析
    测试应用documentFragment 和 直接操作dom 的区别
    javascript 基本数据类型、引用数据类型
    判断一个变量的具体类型 的终极方案
    判断变量是否为 NaN
    C#稳固基础:传统遍历与迭代器
  • 原文地址:https://www.cnblogs.com/tempestT/p/10673163.html
Copyright © 2011-2022 走看看