精华内容
下载资源
问答
  • 分析: 除了圆盘之外,本题的输入也是一个PSLG,因此可以按照前面叙述的算法求出各个区域。但由于本题的特殊性,不难发现...如何让判断多边形是否和圆盘相交?,显然,如果多边形的边圆周规范相交,圆盘多变性一定

    分析:

    除了圆盘之外,本题的输入也是一个PSLG,因此可以按照前面叙述的算法求出各个区域。但由于本题的特殊性,不难发现把线段改成直线后答案不变,因此每个块都是凸多边形,

    可以用切割凸多边形的方法求解:每读入一条线段,都把它当做直线,切割所有块。这样,我们最终得到了若干凸多边形,需要分别判断是否与圆盘相交。

    如何让判断多边形是否和圆盘相交?,显然,如果多边形的边和圆周规范相交,圆盘和多变性一定相交,但反过来却不成立——圆盘和多边形相交,多边形的边和圆周不一定规范相交。

    (1)即使完全没有公共点的时候,圆盘和多边形也可以相交,原因是二者可以相互内含。因此,需要判断多边形是否有顶点在圆内,还需要判断圆心是否在多边形内。

    (2)如果是非规范相交,需要分情况讨论。在图中,待判断的线段(用粗线表示)完全在圆外;在图中待判断的线段则是完全在内部。判断方法很简单,只需判断线段中点是否在圆内即可。

    直接切割多边形~    判断多边形和园盘是否有公共点(面积>0) 

    1  内含的情况--只要多边形poly[0] 在圆内、或者圆心在多边形内

    2  相交的情况-如果不是规范相交,那么不是内含,却有非零公共面积只有一种情况,就是两个点都在圆上,只有判断中点在圆上即可。


     每一个案例忘记输出空行  并不提示Presentation Error ,wa每次pieces更新的时候,newpieces 需要清零

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<cctype>
    #include<string>
    #include<set>
    #include<map>
    #include<queue>
    #include<stack>
    #include<vector>
    using namespace std;
    const double eps=1e-6;
    int dcmp(double x)
    {
        if(fabs(x)<eps) return 0;
        return x>0?1:-1;
        //return fabs(x) < eps ? 0 : (x > 0 ? 1 : -1);
    }
    
    struct point
    {
      double x;
      double y;
      point(){}
      point(double x,double  y):x(x),y(y){}
      void in()
      {
          cin>>x>>y;
      }
      void out()
      {
          cout<<x<<' '<<y<<endl;
      }
      point operator + (const point &t) const
      {
          return point(x+t.x,y+t.y);
      }
      point operator - (const point &t) const
      {
          return point(x-t.x,y-t.y);
      }
      point operator * (const double &t) const
      {
          return point(x*t,y*t);
      }
      point operator / (const double &t) const
      {
          return point(x/t,y/t);
      }
      bool operator < (const point &t) const
      {
          return (dcmp(x-t.x)<0||(dcmp(x-t.x)==0&&dcmp(y-t.y)<0));
      }
      bool operator == (const point &t) const
      {
          return dcmp(x-t.x) ==0 &&dcmp(y-t.y)==0;
      }
    };
    double cross(point a,point b)
    {
        return a.x*b.y-a.y*b.x;
    }
    double dot(point a,point b)
    {
        return a.x*b.x+a.y*b.y;
    }
    double length(point a)
    {
        return sqrt(dot(a,a));
    }
    point nomal(point t)
    {
        double l=length(t);
        return  point(-t.y/l,t.x/l);
    }
    struct line
    {
        point p;
        point v;
        double ang;
        line() {}
        line(point p,point v):p(p),v(v){
            ang=atan2(v.y,v.x);
        }
        bool operator < (const line &l) const
        {
            return ang<l.ang;
        }
        point ppoint(double t)
        {
            return point(p+v*t);
        }
    };
    struct Circle
    {
        point c;
        double r;
        Circle(point c=point(0,0),double r=0):c(c),r(r) {}
    
        point ppoint(double a)
        {
            return point(c.x+r*cos(a),c.y+r*sin(a));
        }
    };
    int getLineCircleIntersection(line l,Circle C,double &t1,double &t2,vector<point> &sol)
    {
        double a=l.v.x;
        double b=l.p.x-C.c.x;
        double c=l.v.y;
        double d=l.p.y-C.c.y;
    
        double e=a*a+c*c;
        double f=2*(a*b+c*d);
        double g=b*b+d*d-C.r*C.r;
    
        double  delta=f*f-4*e*g;
    
        if(dcmp(delta)<0) return 0;
        if(dcmp(delta)==0)
        {
            t1=t2=-f/(2*e);
            sol.push_back(l.ppoint(t1));
            return 1;
        }
        else
        {
            t1=(-f-sqrt(delta))/(2*e);
            t2=(-f+sqrt(delta))/(2*e);
    
            sol.push_back(l.ppoint(t1));
            sol.push_back(l.ppoint(t2));
    
            return 2;
        }
    }
    bool onleft(line l,point p)
    {
        return cross(l.v,p-l.p)>0;
    }
    point getintersection(line a,line b)
    {
        point u=a.p-b.p;
        double t=cross(b.v,u)/cross(a.v,b.v);
        return a.p+a.v*t;
    }
    bool sgementproperintersection(point a1,point a2,point b1,point b2)
    {
        double c1=cross(a2-a1,b1-a1),c2=cross(a2-a1,b2-a1),
               c3=cross(b2-b1,a1-b1),c4=cross(b2-b1,a2-b1);
        return dcmp(c1)*dcmp(c2)<0&&dcmp(c3)*dcmp(c4)<0;
    }
    bool onsegment(point p,point a1,point a2)
    {
        return dcmp(cross(a1-p,a2-p))==0&&dcmp(dot(a1-p,a2-p))<0;
    }
    typedef vector<point> Polygon;
    double PolygonArea(Polygon poly)
    {
        double area=0;
        int n=poly.size();
        for(int i=1;i<n-1;i++)
        {
            area+=cross(poly[i]-poly[0],poly[(i+1)%n]-poly[0]);
        }
        return area/2;
    }
    
    vector<Polygon> pieces,newpieces;
    
    Polygon CutPolygon(Polygon poly,point a,point b)
    {
        Polygon newPoly;
        int n=poly.size();
    
        for(int i=0;i<n;i++)
        {
            point c=poly[i];
            point d=poly[(i+1)%n];
            if(dcmp(cross(b-a,c-a))>=0) newPoly.push_back(c);
            if(dcmp(cross(b-a,d-c))!=0)
            {
                point ip=getintersection(line(c,d-c),line(a,b-a));
                if(onsegment(ip,c,d)) newPoly.push_back(ip); //此时必须用不含端点的“在线段上"
            }
        }
    
        return newPoly;
    }
    
    void cut(point a,point b)
    {
        newpieces.clear();  //仅仅是一个temp 记得清空
        for(int i=0;i<pieces.size();i++)
        {
            Polygon poly=pieces[i];
    
            Polygon left=CutPolygon(poly,a,b);
            Polygon right=CutPolygon(poly,b,a);
            if(left.size()>=3) newpieces.push_back(left);
            if(right.size()>=3) newpieces.push_back(right);
        }
    
        pieces=newpieces;
    }
    
    bool isPointInPolygon(point p,Polygon poly)
    {
        int wn=0;
        int n=poly.size();
        for(int i=0;i<n;i++)
        {
            if(onsegment(p,poly[i],poly[(i+1)%n])) return -1;
            int  k=dcmp(cross(poly[(i+1)%n]-poly[i],p-poly[i]));
            int  d1=dcmp(poly[i].y-p.y);
            int  d2=dcmp(poly[(i+1)%n].y-p.y);
    
            if(k>0&&d1<=0&&d2>0) wn++;
            if(k<0&&d2<=0&&d1>0) wn--;
        }
    
        if(wn!=0) return 1;
        else return 0;
    }
    double length2(point a)
    {
        return dot(a,a);
    }
    bool inCircle(Circle  C,point p) //圆周不算
    {
        if(dcmp(length2(p-C.c)-C.r*C.r)<0) return 1;
        else return 0;
    }
    bool CircleSegIntersection(Circle C,point a,point b) //线段端点不算
    {
        double t1,t2;
        vector<point> sol;
        if(getLineCircleIntersection(line(a,b-a),C,t1,t2,sol)<=1) return 0;
        if(dcmp(t1)>0&&dcmp(t1-1)<0) return 1;
        if(dcmp(t2)>0&&dcmp(t2-1)<0) return 1;
    
        return 0;
    }
    bool CirclePolyIntersection(Circle C,Polygon poly)
    {
        if(isPointInPolygon(C.c,poly)) return 1;
        if(inCircle(C,poly[0]))  return 1;
    
        point a,b;
        int n=poly.size();
        for(int i=0;i<n;i++)
        {
            a=poly[i];
            b=poly[(i+1)%n];
            if(CircleSegIntersection(C,a,b)) return 1;
            if(inCircle(C,(a+b)/2)) return 1;
        }
        return 0;
    }
    void Query(Circle circle)
    {
        vector<double> ans;
        for(int i=0;i<pieces.size();i++)
            if(CirclePolyIntersection(circle,pieces[i]))
        {
            ans.push_back(fabs(PolygonArea(pieces[i])));
        }
        sort(ans.begin(),ans.end());
    
        cout<<ans.size();
        for(int i=0;i<ans.size();i++)
        {
            printf(" %.2f",ans[i]);
        }
        cout<<endl;
    }
    
    int main()
    {
        int n,m,l,w;
        Circle C;
        while(cin>>n>>m>>l>>w)
        {
            if(!n) break;
    
            pieces.clear();
    
            Polygon bbox;
            bbox.push_back(point(0,0));
            bbox.push_back(point(l,0));
            bbox.push_back(point(l,w));
            bbox.push_back(point(0,w));
    
            pieces.push_back(bbox);
    
            point a,b;
            for(int i=0;i<n;i++)
            {
                a.in();
                b.in();
                cut(a,b);
            }
            for(int i=0;i<m;i++)
            {
                cin>>C.c.x>>C.c.y>>C.r;
                Query(C);
            }
            printf("\n");
        }
        return 0;
    }
    


    展开全文
  • 真的很讨厌,数学不是太好,但是几何还好,纵使是这样,该忘了的还是忘了...为了解决在百度API中缺少图形是否相交判断,所以必须,要判断两个图形边缘的点,这下问题就来了, 网上搜一大片,全是绘制View的,找了很

    真的很讨厌,数学不是太好,但是几何还好,纵使是这样,该忘了的还是忘了!满意以为随便搜搜都是一大堆,但是我真的想错了!

    看结果图:
    40条边数,获取每一个点的在实际地理中的坐标(经纬度)
    原点(center)是=32.02103 : 118.763435
    这里写图片描述
    这里写图片描述

    为了解决在百度API中缺少图形是否相交的判断,所以必须,要判断两个图形边缘的点,这下问题就来了,
    网上搜一大片,全是绘制View的,找了很久,算了自己算吧!!

    上代码:
    1.获取圆形上的多个点集合

    /**
    	 * 
    	 * @param lineNum需要获取的正多边形书也可以认为是点的个数
    	 * @param a需要的偏移量本项目中默认是50
    	 * @param ll地理坐标的中心店
    	 * @return实际地理范围的坐标店集合
    	 */
    public static ArrayList<LatLng> logPoint(int lineNum, double a, LatLng ll) {
    	ArrayList<LatLng> lls = new ArrayList<LatLng>();
    	float angle = 360 / lineNum;
    		// 已知多边形的半径为50
    	double b, c;// 边长,a是圆半径固定是50,b是高(Y轴),C是长(X轴)
    	float A = 90, B, C;// 角度,设定B是向量-变化
    	for (int i = 0; i < lineNum; i++) {
    		float angleCenter = angle * i;
    		Log.i("zjs","当前角度   = "+angleCenter);
    			
    			if(angleCenter <=180){
    				B = angleCenter;
    				C = 90 - B;
    				b=a * Math.sin(Math.toRadians(B));
    				c = a * Math.sin(Math.toRadians(C));		
    			}else{
    				B = angleCenter-360;
    				C = 90 - B;
    				b=a * Math.sin(Math.toRadians(B));
    				c = a * Math.sin(Math.toRadians(C));
    			}
    			// 1.同一纬线上经度差一度,实际距离差多少
    			// 111km*cosφ (φ为当地纬度)
    			// 2.同一经线上纬度差一度,实际距离差多少
    			// 111km
    //			Log.d("zjs","b= "+b+"  :  c="+c);
    			b = b / (111000*Math.cos(ll.longitude)) + ll.longitude;
    			c = c / 111000 + ll.latitude;
    		Log.d("zjs","以地理坐标点为中心——第"+(i+1)+"个坐标点的位置是      =   "+b+"  :  "+c);
    			lls.add(new LatLng(c, b));
    
    		}
    
    		return lls;
    	}
    

    2.通过百度API判断是否相交

    // TODO 获取正多边形(40边)的角点,(后面可以加入方位角,根据需求减少判断的方向)
    	ArrayList<LatLng> lls = logPoint(40, minlen, gps);
    		boolean inDistance = false;
    		 for (int i = 0; i < lls.size(); i++) {
    if (SpatialRelationUtil.isPolygonContainsPoint(list,
    				lls.get(i))) {
    						inDistance=true;
    						break;
    					}
    				}
    

    铛铛铛:(需要注意的坑)
    1.Java的Math.sin等调用的参数是弧度,我一度直接调用,到时结果莫名其妙,所以一定要转换成角度,不会再被坑了,
    2.实际地理地图中的坐标和长度之间的转换,//能复制就复制,别敲错了
    3.在角度和方向的问题,判断减少了,以180度为中心对半开。前面写的绕了

    然后就可以妥妥来实现,google,高德都有的(图形相交的状态)功能了,
    加油了,继续努力!!

    谢谢你您的回复,根据您的回复我单独在底图上绘制出来
    在这里插入图片描述我也想明白你们为什么会是椭圆的,或者说椭圆都不算,是向个鸡蛋一样。
    真的对此我还是不太了解…

    展开全文
  • 题意:给出一个多边形和一个,问是否是凸多边形,若是则再问圆是否在凸多边形内部。分3步:1、判断是否是凸多边形2、判断是否多边形内部3、判断点到各边的距离是否大于等于半径上代码:#include #include #...

    题意:给出一个多边形和一个圆,问是否是凸多边形,若是则再问圆是否在凸多边形内部。

    分3步:

    1、判断是否是凸多边形

    2、判断点是否在多边形内部

    3、判断点到各边的距离是否大于等于半径

    上代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    
    #define maxn 2000
    #define eps 10E-8
    
    struct Point
    {
        double x, y;
        Point operator-(const Point &a) const
        {
            Point ret;
            ret.x = x - a.x;
            ret.y = y - a.y;
            return ret;
        }
    } point[maxn], peg;
    
    double pegr;
    int n;
    
    int dblcmp(double a)
    {
        if (fabs(a) < eps)
            return 0;
        return a >0?1 : -1;
    }
    
    double xmult(const Point &a, const Point &b)
    {
        return a.x * b.y - b.x * a.y;
    }
    
    void input()
    {
        scanf("%lf%lf%lf", &pegr, &peg.x, &peg.y);
        for (int i =0; i < n; i++)
            scanf("%lf%lf", &point[i].x, &point[i].y);
        int t =0;
        int i =0;
        while (i < n && t ==0)
        {
            t = dblcmp(xmult(point[(i +1)%n] - point[i], point[(i +2)%n] - point[i]));
            i++;
        }
        if (t <0)
            reverse(point, point + n);
    }
    
    bool convex()
    {
        for (int i =0; i < n; i++)
            if (dblcmp(xmult(point[(i +1)%n] - point[i], point[(i +2)%n] - point[(i +1)%n]))    <0)
                return false;
        return true;
    }
    
    bool inconvex()
    {
        for (int i =0; i < n; i++)
            if (dblcmp(xmult(point[(i +1)%n] - point[i], peg - point[(i +1)%n])) <=0)
                return false;
        return true;
    }
    
    double dist(const Point &a, const Point &b)
    {
        Point p;
        p = a - b;
        return sqrt(p.x * p.x + p.y * p.y);
    }
    
    bool ok()
    {
        for (int i =0; i < n; i++)
            if (dblcmp(abs(xmult(peg - point[i], point[(i +1)%n] - point[i]))/dist(point[i], point[(i +1)%n]) - pegr) <0)
                return false;
        return true;
    }
    
    int main()
    {
        while (scanf("%d", &n) != EOF)
        {
            if (n<3)
                break;
            input();
            if (!convex())
                printf("HOLE IS ILL-FORMED\n");
            else if (!inconvex()||!ok())
                printf("PEG WILL NOT FIT\n");
            else
                printf("PEG WILL FIT\n");
        }
        return 0;
    }
    
    展开全文
  • 题意:给出一个多边形和一个,问是否是凸多边形,若是则再问圆是否在凸多边形内部。 分3步: 1、判断是否是凸多边形 2、判断是否多边形内部 3、判断点到各边的距离是否大于等于半径 上代码: #include...

    题意:给出一个多边形和一个圆,问是否是凸多边形,若是则再问圆是否在凸多边形内部。

    分3步:

    1、判断是否是凸多边形

    2、判断点是否在多边形内部

    3、判断点到各边的距离是否大于等于半径

    上代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    
    #define maxn 2000
    #define eps 10E-8
    
    struct Point
    {
        double x, y;
        Point operator-(const Point &a) const
        {
            Point ret;
            ret.x = x - a.x;
            ret.y = y - a.y;
            return ret;
        }
    } point[maxn], peg;
    
    double pegr;
    int n;
    
    int dblcmp(double a)
    {
        if (fabs(a) < eps)
            return 0;
        return a >0?1 : -1;
    }
    
    double xmult(const Point &a, const Point &b)
    {
        return a.x * b.y - b.x * a.y;
    }
    
    void input()
    {
        scanf("%lf%lf%lf", &pegr, &peg.x, &peg.y);
        for (int i =0; i < n; i++)
            scanf("%lf%lf", &point[i].x, &point[i].y);
        int t =0;
        int i =0;
        while (i < n && t ==0)
        {
            t = dblcmp(xmult(point[(i +1)%n] - point[i], point[(i +2)%n] - point[i]));
            i++;
        }
        if (t <0)
            reverse(point, point + n);
    }
    
    bool convex()
    {
        for (int i =0; i < n; i++)
            if (dblcmp(xmult(point[(i +1)%n] - point[i], point[(i +2)%n] - point[(i +1)%n]))    <0)
                return false;
        return true;
    }
    
    bool inconvex()
    {
        for (int i =0; i < n; i++)
            if (dblcmp(xmult(point[(i +1)%n] - point[i], peg - point[(i +1)%n])) <=0)
                return false;
        return true;
    }
    
    double dist(const Point &a, const Point &b)
    {
        Point p;
        p = a - b;
        return sqrt(p.x * p.x + p.y * p.y);
    }
    
    bool ok()
    {
        for (int i =0; i < n; i++)
            if (dblcmp(abs(xmult(peg - point[i], point[(i +1)%n] - point[i]))/dist(point[i], point[(i +1)%n]) - pegr) <0)
                return false;
        return true;
    }
    
    int main()
    {
        while (scanf("%d", &n) != EOF)
        {
            if (n<3)
                break;
            input();
            if (!convex())
                printf("HOLE IS ILL-FORMED\n");
            else if (!inconvex()||!ok())
                printf("PEG WILL NOT FIT\n");
            else
                printf("PEG WILL FIT\n");
        }
        return 0;
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    转载于:https://www.cnblogs.com/wanglaoda/p/4937161.html

    展开全文
  • 乍一看这标题,多像是...如果要判断是否在矩形或者内部,其实很简单。/** * 勾股定理 * 圆心:cx, cy * 半径: r */ const inside = (p.x - cx) ** 2 + (p.y - cy) ** 2 <= r ** 2 /** * 矩形 * 左...
  • 题意:按顺时针或逆时针顺序给出一个凸n边形的n个点的坐标,然后让一个圆心在(0,0)的圆和凸n边形相交的面积大于等于R,问圆的最小半径。 题解:这题简直坑爹啊,各种细节错误。。修修改改了一天,最后看别人题解也...
  • 在这个过程中需要判断圆多边形之间的关系。 大白上讲得很清楚了。 就是如果完全没有公共点,那就判断是否互相包含。具体一点就是看圆心是否在凸多边形内,凸多边形的任意一个点是否在圆内。 否则他们一
  • SAT是一种高效的算法,能够出去每种形状对(譬如 圆和圆 圆和多边形 多边形和线段)对碰撞检测代码的需求从而减少代码减轻维护压力。凸多边形:SAT 就像以前说过的一样,是一个检测两个凸多边...
  • 判断是两个形状是否相交(一)-SAT分离轴理论原文地址简介分离轴理论,简称SAT(SeparatingAxisTheoremSeparating Axis Theorem),是一个判断两个凸多边形是否碰撞的理论。此理论可以用于找到最小的渗透向量(感觉...
  • 关于二维的点、线、多边形、圆几何关系库 c ,包含头文件就能用。 ㈠ 点的基本运算 1. 平面上两点之间距离 1 ...9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31 13.公式: 32
  • 常用几何算法

    2020-04-28 22:52:44
    判断线段直线是否相交 判断矩形是否包含点 判断线段、折线、多边形是否在矩形中 判断矩形是否在矩形中 判断圆是否在矩形中 判断点是否在多边形中 判断线段是否在多边形内 判断折线是否在多边形内 判断多边形是否在...
  • GIS常用的几何算法

    2010-06-14 16:56:06
    矢量的概念 矢量加减法 矢量叉积 折线段的拐向判断 判断点是否在线段上 判断两线段是否相交 判断线段直线是否相交 判断矩形是否包含点 判断线段、折线、多边形是否在矩形中 判断矩形是否在矩形中 判断圆是否在矩形...
  • 计算几何资料

    2012-11-18 19:15:36
    判断线段直线是否相交 8. 判断矩形是否包含点 9. 判断线段、折线、多边形是否在矩形中 10. 判断矩形是否在矩形中 11. 判断圆是否在矩形中 12. 判断点是否在多边形中 13. 判断线段是否在多边形内 14. 判断折线是否...
  • uva 12296 Pieces and Discs

    2015-10-20 22:58:00
    题意: 有个矩形,左下角(0,0),左上角(L,W). ...如何判断多边形是否与圆盘相交:如果多边形的边和圆周规范相交,圆盘和多边形一定相交, 1:即使完全没有公共点,也可以相交,互相内含 需要判断多边形是否有顶...
  • 一、目录 本文整理的计算几何基本概念常用算法包括如下内容: 1. 矢量的概念 2. 矢量加减法 3. 矢量叉积 4. 折线段的拐向判断 ...11. 判断圆是否在矩形中 12. 判断点是否多边形中 13. 判断线段是否在...
  • 计算几何算法源码

    热门讨论 2013-07-29 19:27:02
    ㈠ 点的基本运算 1. 平面上两点之间距离 2. 判断两点是否重合 3. 矢量叉乘 4. 矢量点乘 5. 判断是否在线段上 6. 求一点饶某点旋转后的坐标 ...9. 圆和直线关系 10. 内切圆 11. 求切点 12. 线段的左右旋 13.公式
  • 常用几何关系算法

    2018-11-06 10:29:19
    几何关系算法集: 目录 ㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 ...9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31 13.公式: 32
  • 计算几何算法大全

    2016-11-02 18:21:10
    ㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 5. 判断是否在线段上 2 ...9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31
  • 计算几何

    热门讨论 2012-08-06 21:49:17
    目录 ㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 ...9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31 13.公式: 32
  • 空间几何计算

    2014-03-18 14:11:08
    计算几何 目录 ㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 ...9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31 13.公式: 32
  • C++计算几何算法大全

    热门讨论 2010-05-20 20:36:33
    ㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 5. 判断是否在线段上 2 ...9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31
  • 计算几何常用算法:点、线、面

    热门讨论 2009-04-21 23:25:01
    计算几何算法(含源代码) ㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 ...9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31 13.公式: 32
  • 1. 矢量的概念 2. 矢量加减法 3. 矢量叉积 4. 折线段的拐向判断 5.... 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31 13.公式: 32
  • 计算几何汇总

    2019-10-17 00:37:30
    计算几何——判断两线段是否相交 计算几何——判断点是否在多边形内 计算几何——直线、线段和圆的交点 计算几何——多边形面积 计算几何——扇形面积 计算几何——多边形和圆相交的面积 计算几何——空袭计算 ...
  • 计算机图形学几何算法源码包,如下: <br> 目录 <br>㈠ 点的基本运算 1. 平面上两点之间距离 1 ... 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31 13.公式: 32
  • ACM 计算几何模板

    2014-05-09 14:51:37
    12. 判断一个简单多边形是否有核 52 13. 模拟退火 54 14. 六边形坐标系 56 15. 用一个给定半径的覆盖最多的点 60 16. 不等大的的圆弧表示 62 17. 矩形面积并 62 18. 矩形的周长并 66 19. 最近对 70 20. 求两个...
  • hdu-5127------hdu5137

    2016-10-22 16:15:00
    枚举两个长方形的对角线,然后判断是否相交,更新答案就好; hdu-5130 思路: 将题给的条件变换后是求一个多边形的面积交;将多边形三角剖分后求与的面积; hdu-5131 思路: 写个cmp函数,sort一下就...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

判断圆和多边形是否相交