日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

洛谷

發布時間:2024/5/24 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 洛谷 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.luogu.org/problemnew/show/P1355

判斷一個點和三角形的位置關系,最簡單的思路就是用向量。

首先排除掉和三角形頂點重合的情況。

把三角形設計成一個首尾相接的三個向量,從三個向量的起點連線到P點構成新向量,叉乘判斷方向。二維向量叉乘(x1,y1)×(x2,y2)=(x1y2-x2y1),方向是右手螺旋。那么判斷正負號就知道他們在向量的哪一側了。

在三角形中的應該在三個向量的同側。而不在三角形中的會有一個方向與另外兩個不同。在三角形上的顯然就是存在一個0。

上面的解法有一個bug,其實叉乘為0只是代表在直線上,判斷在線段上還要加一次點乘。

順便練習一波scanf,注意scanf讀入double必須是%lf,要求scanf略去字符可以參考下方寫法,注意換行符用空格略去

#include<bits/stdc++.h>
using namespace std;
#define ll long long


struct Vector{
    double x,y;

    Vector(double xx=0.0,double yy=0.0){x=xx,y=yy;}

    Vector operator-(Vector v2){
        return Vector(x-v2.x,y-v2.y);
    }

    bool operator==(Vector v2){
        if(fabs(x-v2.x)<1e-8&&fabs(y-v2.y)<1e-8)
            return true;
        return false;
    }

    double dot(Vector v2){
        return x*v2.x+y*v2.y;
    }

    double cross(Vector v2){
        return x*v2.y-y*v2.x;
    }
};

typedef Vector Point;

int main(){
    Point A,B,C,P;
    scanf("(%lf,%lf)",&A.x,&A.y);
    scanf(" (%lf,%lf)",&B.x,&B.y);
    scanf(" (%lf,%lf)",&C.x,&C.y);
    scanf(" (%lf,%lf)",&P.x,&P.y);

    if(A==P||B==P||C==P){
        printf("4
");
        return 0;
    }

    Vector a=C-B,b=A-C,c=B-A;
    Vector pa=P-B,pb=P-C,pc=P-A;

    double cross1=a.cross(pa);
    double cross2=b.cross(pb);
    double cross3=c.cross(pc);

    if(fabs(cross1)<1e-8){
        //bug在這里,叉乘為0是在直線上而非線段上
        //前面判斷了在端點上的情況,所以現在只需要判斷方向
        Vector t1=pa,t2=pb;
        if(t1.dot(t2)<0)
            printf("3
");
        else
            printf("2
");
        return 0;
    }


    if(fabs(cross2)<1e-8){
        //bug在這里,叉乘為0是在直線上而非線段上
        //前面判斷了在端點上的情況,所以現在只需要判斷方向
        Vector t1=pb,t2=pc;
        if(t1.dot(t2)<0)
            printf("3
");
        else
            printf("2
");
        return 0;
    }

    if(fabs(cross3)<1e-8){
        //bug在這里,叉乘為0是在直線上而非線段上
        //前面判斷了在端點上的情況,所以現在只需要判斷方向
        Vector t1=pc,t2=pa;
        if(t1.dot(t2)<0)
            printf("3
");
        else
            printf("2
");
        return 0;
    }

    int flag1=cross1*cross2>0;
    int flag2=cross2*cross3>0;
    int flag3=cross3*cross1>0;

    if(flag1&&flag2&&flag3){
        printf("1
");
        return 0;
    }

    printf("2
");

}

總結

以上是生活随笔為你收集整理的洛谷的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜精品久久久久久久99黑人 | 日韩中文字幕综合 | 国产精品夜夜 | 国产熟女一区二区三区四区 | 黄色国产视频 | 美国黄色一级视频 | aaaaaabbbbbb毛片| 人人妻人人澡人人爽精品日本 | av永久免费在线观看 | 欧美色图在线播放 | 毛片视频观看 | 台湾150部性三级 | 日韩人妻精品在线 | www.99在线 | 国产精品久久久久久久久久久久久久久久 | 国产特级aaaaaa大片 | 亚洲精品视频观看 | 日韩在线视频免费观看 | 国产按摩一区二区三区 | 精品国产www| 国产绿帽刺激高潮对白 | 麻豆精品国产 | 好看的黄色网址 | 欧美精品a区| 香蕉久久夜色精品升级完成 | av中文字幕免费在线观看 | 国产破处视频 | 美女被娇喘视频 | 成人免费黄色av | 91精品91久久久中77777老牛 | 欧美成人免费大片 | 国产精品videos| 久久网一区二区 | 91黄色大片 | 一区二区三区免费在线观看视频 | 亚洲国产精品视频一区二区 | 日韩精品一区二区三区不卡 | 夜夜爱视频 | 中国黄色一级视频 | 人民的名义第二部 | 国产视频网站在线观看 | 少妇人妻偷人精品无码视频 | 涩涩在线看 | av作品在线观看 | 国产午夜一区二区 | 亚洲福利专区 | 成年人黄色免费网站 | 久久精品一区二区三区四区 | 美女看片 | 男女啪啪国产 | 色亭亭| 私人网站 | a∨鲁丝一区鲁丝二区鲁丝三区 | 黑鬼大战白妞高潮喷白浆 | 久久免费一级片 | 夜夜操网址 | 中文字幕精品久久久久人妻红杏ⅰ | 久久精品小视频 | 91久久免费视频 | 久草国产视频 | 国产伦精品一区 | 国产精品探花一区二区在线观看 | 国产精品一区二区6 | 中文字幕第27页 | 手机av不卡 | 99精品久久久久久 | 亚洲AV无码国产精品午夜字幕 | 亚洲黄色中文字幕 | 亚洲理伦 | 婷婷综合 | 国产有码视频 | 黄色片欧美 | 欧美色女人 | 中文字幕精品在线观看 | www.久久久久久久久 | 午夜精品福利在线观看 | 欧美亚洲视频 | 视频污在线观看 | 日韩少妇av| 亚洲国产mv | 精品少妇一区二区三区免费观看 | 九九视频免费在线观看 | 香蕉视频一区二区三区 | 亚洲精品第三页 | 老太脱裤让老头玩ⅹxxxx | 国产吞精囗交免费视频 | 99久久精品无码一区二区毛片 | 欧美中字 | 国产三级伦理片 | 国产一级片毛片 | 色就色综合 | 2023天天操 | 少妇被又大又粗又爽毛片久久黑人 | 午夜成人免费影院 | 国产福利视频在线 | 国产免费又爽又色又粗视频 | 久久国产精品影视 | 日本一区二区三区久久 | 青青草欧美|