zoukankan      html  css  js  c++  java
  • The area 积分积分

    The area
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
    Submit Status

    Description

    Ignatius bought a land last week, but he didn't know the area of the land because the land is enclosed by a parabola and a straight line. The picture below shows the area. Now given all the intersectant points shows in the picture, can you tell Ignatius the area of the land? 

    Note: The point P1 in the picture is the vertex of the parabola. 

     

    Input

    The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. 
    Each test case contains three intersectant points which shows in the picture, they are given in the order of P1, P2, P3. Each point is described by two floating-point numbers X and Y(0.0<=X,Y<=1000.0). 
     

    Output

    For each test case, you should output the area of the land, the result should be rounded to 2 decimal places. 
     

    Sample Input

    2
    5.000000 5.000000
    0.000000 0.000000
    10.000000 0.000000
    10.000000 10.000000
    1.000000 1.000000
    14.000000 8.222222
     

    Sample Output

    33.33
    40.69
     
     
     1 #include <iostream>
     2 #include <math.h>
     3 #include <stdio.h>
     4 #include <string.h>
     5 using namespace std;
     6 struct point
     7 {
     8     double x,y;
     9 } p1,p2,p3;
    10 double a,b,c,a1,b1;
    11 double F(double x)
    12 {
    13     return fabs(a*(x-b)*(x-b)+c-a1*x-b1);
    14 }
    15 void init()
    16 {
    17     b = p1.x;
    18     c = p1.y;
    19     a = (p2.y - c) / (p2.x - b) / (p2.x - b);
    20     a1 = (p3.y - p2.y) / (p3.x - p2.x);
    21     b1 = p2.y - a1 * p2.x;
    22     //cout<<a<<"   "<<b<<"    "<<c<<" "<<a1<<" "<<b1<<" "<<endl;
    23 }
    24 //三点辛普森公式
    25 double simpson(double width,double fa,double fb,double fc)
    26 {
    27     return (fb+fa+4*fc)*width/6;
    28 }
    29 
    30 //自适应simpson公式递归过程
    31 double asr(double a,double b,double eps,double A)
    32 {
    33     double c=(a+b)/2;
    34     double fa,fb,fc,L,R;
    35     fa=F(a);
    36     fb=F(b);
    37     fc=F(c);
    38     L=simpson(c-a,fa,fc,F((c+a)/2));
    39     R=simpson(b-c,fc,fb,F((b+c)/2));
    40     if(fabs(L+R-A)<=15*eps) return L+R+(L+R-A)/15;
    41     return asr(a,c,eps/2,L)+asr(c,b,eps/2,R);
    42 }
    43 double asr1(double a,double b,double eps)
    44 {
    45     return asr(a,b,eps,simpson(b-a,F(a),F(b),F((b+a)/2)));
    46 }
    47 int main()
    48 {
    49     int t;
    50     scanf("%d",&t);
    51     while(t--)
    52     {
    53         scanf("%lf%lf",&p1.x,&p1.y);
    54         scanf("%lf%lf",&p2.x,&p2.y);
    55         scanf("%lf%lf",&p3.x,&p3.y);
    56         init();
    57         printf("%.2lf
    ",asr1(p2.x,p3.x,0.0000001));
    58     }
    59 }
    View Code
     
     
  • 相关阅读:
    show point on image
    vec2d
    Size类型如何调用和定义
    opencv数据类型和格式的坑
    IplImage 与mat之间的转换及释放内存
    linux平台程序高精度延时问题select-usleep等
    gettimeofday的使用
    列模式编辑文本
    【linux基础】如何开机自启动某个程序-linux工具-ubuntu
    查看camera设备-linux
  • 原文地址:https://www.cnblogs.com/ERKE/p/3889116.html
Copyright © 2011-2022 走看看