• Triangle Fun UVA


    Triangle Fun

     UVA - 11437 

    题意:给三角形,求一些三等分点,线段交点,求面积。

    简单题~

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int inf = 0x3f3f3f3f;
     4 const double eps = 1e-12;
     5 const double pi = acos(-1.0);
     6 
     7 struct Point {
     8     double x,y;
     9     Point (double x = 0, double y = 0) : x(x), y(y) {}
    10 };
    11 typedef Point Vector;
    12 Vector operator + (Vector a, Vector b) {
    13     return Vector (a.x + b.x, a.y + b.y);
    14 }
    15 Vector operator * (Vector a, double s) {
    16     return Vector (a.x * s, a.y * s);
    17 }
    18 Vector operator / (Vector a, double p) {
    19     return Vector (a.x / p, a.y / p);
    20 }
    21 Vector operator - (Point a, Point b) {
    22     return Vector (a.x - b.x, a.y - b.y);
    23 }
    24 bool operator < (Point a, Point b) {
    25     return a.x < b.x || (a.x == b.x && a.y < b.y);
    26 }
    27 int dcmp (double x) {
    28     if(fabs(x) < eps) return 0;
    29     return x < 0 ? -1 : 1;
    30 }
    31 bool operator == (const Point &a, const Point &b) {
    32     return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
    33 }
    34 double Angel (Vector a) {
    35     return atan2(a.y, a.x);
    36 }
    37 double Dot(Vector a, Vector b) {
    38     return a.x * b.x + a.y * b.y;
    39 }
    40 double Length (Vector a) {
    41     return sqrt(Dot(a, a));
    42 }
    43 double Angle (Vector a, Vector b) {
    44     return acos(Dot(a, b) / Length(a) / Length(b));
    45 }
    46 double Cross (Vector a, Vector b) {
    47     return a.x * b.y - a.y * b.x;
    48 }
    49 //两直线交点
    50 Point GetLineIntersection (Point p, Vector v, Point q, Vector w) {
    51     Vector u = p - q;
    52     double t1 = Cross(w, u) / Cross(v, w);
    53     double t2 = Cross(v, u) / Cross(v, w);
    54     return p + v * t1;  //  return q + w * t2;
    55 }
    56 //多边形面积
    57 double ConvexPolygonArea(Point *p, int n) {
    58     double area = 0;
    59     for(int i = 1; i < n-1; i++) {
    60         area += Cross(p[i] - p[0], p[i+1] - p[0]);
    61     }
    62     return area / 2;
    63 }
    64 
    65 Point p[3],ch[3];
    66 int main(){
    67     int t;
    68     //freopen("in.txt", "r", stdin);
    69     scanf("%d", &t);
    70     while(t--){
    71         for(int i = 0; i < 3; i++){
    72             scanf("%lf %lf", &p[i].x, &p[i].y);
    73         }
    74         Point d = p[1] + (p[2] - p[1])/3;
    75         Point e = p[2] + (p[0] - p[2])/3;
    76         Point f = p[0] + (p[1] - p[0])/3;
    77         ch[0] = GetLineIntersection(p[0], d-p[0], p[1], e-p[1]);
    78         ch[1] = GetLineIntersection(p[2], f-p[2], p[1], e-p[1]);
    79         ch[2] = GetLineIntersection(p[2], f-p[2], p[0], d-p[0]);
    80         double area = ConvexPolygonArea(ch,3);
    81         printf("%.0lf
    ", area);  //这里是四舍五入,如果强制转换是截断,会WA
    82     }
    83 }
    View Code
  • 相关阅读:
    保存windows 10的登录界面壁纸
    Python 从剪贴板中生成二维码
    SpringBoot
    IDEA8条配置
    Nodejs-hexoBlog
    Mybatis-Plus
    Javaweb文件上传
    GIt基本语法
    JS常用部分整合
    javaweb-maven学习总结
  • 原文地址:https://www.cnblogs.com/yijiull/p/7586571.html
Copyright © 2020-2023  润新知