zoukankan      html  css  js  c++  java
  • qsc52(三角形线性插值)

    题目链接:http://qscoj.cn/problem/52/

    题意:中文题诶~

    思路:水题,只要知道三角形插值和判断点在三角形内就OK了

    关于三角形插值:http://www.cnblogs.com/wangchengfeng/p/3453194.html

    先判断插入点是否在三角形内,在的话解二元一次方程组:

    P.x = (1 - u - v) * P1.x + u * P2.x + v * P3.x

    P.y = (1 - u - v) * P1.y + u * P2.y + v * P3.y

    再将u, v代入:P = (1 - u - v) * P1 + u * P2 + v * P3

    P就是答案了

    代码:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <math.h>
     4 using namespace std;
     5 
     6 const double res=1e-6;
     7 struct node{
     8     double x, y;
     9 };
    10 
    11 double get_area(node a, node b, node c){ //***用行列式计算三角形面积
    12     double area=fabs(a.x*b.y+a.y*c.x+b.x*c.y-a.x*c.y-a.y*b.x-b.y*c.x);
    13     return area;
    14 }
    15 
    16 bool is_ok(node p1, node p2, node p3, node p){//***判断点p是否在三角形内
    17     double areap=get_area(p1, p2, p);
    18     areap+=get_area(p1, p3, p);
    19     areap+=get_area(p2, p3, p);
    20     double area=get_area(p1, p2, p3);
    21     if(fabs(areap-area)<res){
    22         return true;
    23     }else{
    24         return false;
    25     }
    26 }
    27 
    28 int main(void){
    29     double x1, y1, w1, x2, y2, w2, x3, y3, w3, x, y;
    30     while(cin >> x1 >> y1 >> w1 >> x2 >> y2 >> w2 >> x3 >> y3 >> w3 >> x >> y){
    31         node p1, p2, p3, p;
    32         p1.x=x1, p1.y=y1;
    33         p2.x=x2, p2.y=y2;
    34         p3.x=x3, p3.y=y3;
    35         p.x=x, p.y=y;
    36         if(!is_ok(p1, p2, p3, p)){
    37             cout << -1 << endl;
    38             continue;
    39         }
    40         double a1=x2-x1, b1=x3-x1, c1=x-x1;
    41         double a2=y2-y1, b2=y3-y1, c2=y-y1;
    42         double u=(b1*c2-b2*c1)/(a2*b1-a1*b2);
    43         double v=(c1-a1*u)/b1;
    44         double ans=(1-u-v)*w1+u*w2+v*w3;
    45         printf("%.2lf
    ", ans);
    46     }
    47 }
    View Code
  • 相关阅读:
    Using Change Management and Change Control Within a Project
    swift3.0 label改变行间距
    swift清理缓存
    Alamofire的get请求,post请求,以及上传字典
    swift跳转时隐藏tabbar,跳回时显示
    swift获取当前的Version
    swift回收键盘
    OC中常用的设计模式
    关于iOS多线程
    理解 : UDID、UUID、IDFA、IDFV
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6602129.html
Copyright © 2011-2022 走看看