91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 15KB
    文件類型: .bz2
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-19
  • 語言: C/C++
  • 標簽: C++??幾何運算??源碼??

資源簡介

幾何算法大全,包含大量的幾何算法的C++源碼。如點、線、面的幾何要素計算等。非常實用

資源截圖

代碼片段和文件信息

我頂?字號:大?中?小
#include
#include
struct?Point{
???????double?xy;
};
int?dblcmp(double?d)
{
????if(fabs(d)<0.000000001)return?0;
????return?(d>0)?1:-1;
}
double?det(double?x1double?y1double?x2double?y2)
{?return?x1*y2-x2*y1;}
double?cross(Point?aPoint?bPoint?c)
{//叉積?
???????return?det(b.x-a.x?b.y-a.y?c.x-a.x?c.y-a.y);
}
int?xycmp(double?pdouble?minidouble?maxi)
{?return?dblcmp(p-mini)*dblcmp(p-maxi);}
double?min(double?adouble?b)
{?if(adouble?max(double?adouble?b)
{???if(a>b)return?a;?else?return?b;}
int?betweencmp(Point?aPoint?bPoint?c?)
{//點a與b或c重合時為0
?//點a在bc內部?時為-1
?//點a在bc外部?時為?1
???if(?fabs(b.x-c.x)>fabs(b.y-c.y))
??????return?xycmp(a.xmin(b.xc.x)max(b.xc.x));
???else
??????return?xycmp(a.xmin(b.yc.y)max(b.yc.y));
}
int?segscross(Point?aPoint?bPoint?cPoint?dPoint?&p)
{//?線段?ab?cd?規范相交返回?1?并求交點?P?;?不規范相交返回?2?;沒有交點返回?0
???double?s1s2s3s4;
???int?d1d2d3d4;
???d1=dblcmp(s1=cross(abc));
???d2=dblcmp(s2=cross(abd));
???d3=dblcmp(s3=cross(cda));
???d4=dblcmp(s4=cross(cdb));
???if(?((d1^d2)==-2)?&&?((d3^d4)==-2))
???{
??????p.x=(c.x*s2-d.x*s1)/(s2-s1);
??????p.y=(c.y*s2-d.y*s1)/(s2-s1);
??????return?1;
???}
???if(?((d1==0)&&?(betweencmp(cab)<=0))?||
????????((d2==0)&&?(betweencmp(dab)<=0))?||
????????((d3==0)&&?(betweencmp(acd)<=0))?||
????????((d4==0)&&?(betweencmp(bcd)<=0))?)
????????return?2;
????return?0;
}
double?area(Point?aPoint?b)
{?return?a.x*b.y-a.y*b.x;}
double?areas(Point?A[]int?n)
{//求?n?個點的面積???A中的點按逆時針方向存放
?//多邊形是任意的凸或凹多邊形,
???double?re=0;
???int?i;
???if(n<3)return?0;
???for(i=0;i??????re+=area(A[i]A[(i+1)%n]);
???re=fabs(re/2);
}
void?MidPoint(Point?A[]int?nPoint?&p)
{//求多邊形的重心?A中的點按逆時針方向存放
?????int?i;
?????double?areasspx=0py=0tem;
?????areass=areas(A?n);
?????for(i=0;i?????{?tem=area(A[i]A[(i+1)%n]);
????????px+=tem*(A[i].x+A[(i+1)%n].x);
????????py+=tem*(A[i].y+A[(i+1)%n].y);
?????}
?????p.x=fabs(px)/(6*areass);
?????p.y=fabs(py)/(6*areass);
}
int?main()
{
???Point?abcdp;
???Point???A[10000];
???int?n;
???a.x=0;a.y=0;
???b.x=1;b.y=1;
???c.x=0;c.y=2;
???d.x=3;d.y=0;
???int?i=segscross(abcdp);
???printf(“%d\n%lf?%lf\n“ip.xp.y);
???while(1);
}
?
//另一版本
#include?
#define?infinity?1e20
#define?EP?1e-10
struct?TPoint{
???????float?xy;
???????};
?
struct?TLineSeg{
???????TPoint?ab;
};
//求平面上兩點之間的距離
float?distance(TPoint?p1TPoint?p2)
{
???????return(sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)));
}
/********************************************************
?返回(P1-P0)*(P2-P0)的叉積。
?若結果為正,則的順時針方向;
?若為0則共線;
?若為負則的在逆時針方向;
?可以根據這個函數確定兩條線段在交點處的轉向
?比如確定p0p1和p1p2在p1處是左轉還是右轉,只要求
?(p2-p0)*(p1-p0),若<0則左轉,>0則右轉,=0則共線
*********************************************************/
float?multiply(TPoint?p1TPoint?p2TPoint?p0)
{
???????return((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y));?
}
//確定兩條線段是否相交
int?intersect(TLineSeg?uTLineSeg?v)
{
???????return(?(ma

評論

共有 條評論