几何acm.docx

上传人:b****5 文档编号:3199924 上传时间:2022-11-20 格式:DOCX 页数:182 大小:150.34KB
下载 相关 举报
几何acm.docx_第1页
第1页 / 共182页
几何acm.docx_第2页
第2页 / 共182页
几何acm.docx_第3页
第3页 / 共182页
几何acm.docx_第4页
第4页 / 共182页
几何acm.docx_第5页
第5页 / 共182页
点击查看更多>>
下载资源
资源描述

几何acm.docx

《几何acm.docx》由会员分享,可在线阅读,更多相关《几何acm.docx(182页珍藏版)》请在冰豆网上搜索。

几何acm.docx

几何acm

(1)几何公式

【三角形】:

1.半周长P=(a+b+c)/2

2.面积S=aHa/2=absin(C)/2=sqrt(P(P-a)(P-b)(P-c))

3.中线Ma=sqrt(2(b^2+c^2)-a^2)/2=sqrt(b^2+c^2+2bccos(A))/2

4.角平分线Ta=sqrt(bc((b+c)^2-a^2))/(b+c)=2bccos(A/2)/(b+c)

5.高线Ha=bsin(C)=csin(B)=sqrt(b^2-((a^2+b^2-c^2)/(2a))^2)

6.内切圆半径r=S/P=asin(B/2)sin(C/2)/sin((B+C)/2)

=4Rsin(A/2)sin(B/2)sin(C/2)=sqrt((P-a)(P-b)(P-c)/P)

=Ptan(A/2)tan(B/2)tan(C/2)

7.外接圆半径R=abc/(4S)=a/(2sin(A))=b/(2sin(B))=c/(2sin(C))

【四边形】:

D1,D2为对角线,M对角线中点连线,A为对角线夹角

1.a^2+b^2+c^2+d^2=D1^2+D2^2+4M^2

2.S=D1D2sin(A)/2

(以下对圆的内接四边形)

3.ac+bd=D1D2

4.S=sqrt((P-a)(P-b)(P-c)(P-d)),P为半周长

【正n边形】:

R为外接圆半径,r为内切圆半径

1.中心角A=2PI/n

2.内角C=(n-2)PI/n

3.边长a=2sqrt(R^2-r^2)=2Rsin(A/2)=2rtan(A/2)

4.面积S=nar/2=nr^2tan(A/2)=nR^2sin(A)/2=na^2/(4tan(A/2))

【圆】:

1.弧长L=rA

2.弦长a=2sqrt(2hr-h^2)=2rsin(A/2)

3.弓形高h=r-sqrt(r^2-a^2/4)=r(1-cos(A/2))=atan(A/4)/2

4.扇形面积S1=rl/2=r^2A/2

5.弓形面积S2=(rl-a(r-h))/2=r^2(A-sin(A))/2

【棱柱】:

1.体积V=Ah,A为底面积,h为高

2.侧面积S=lp,l为棱长,p为直截面周长

3.全面积T=S+2A

【棱锥】:

1.体积V=Ah/3,A为底面积,h为高

(以下对正棱锥)

2.侧面积S=lp/2,l为斜高,p为底面周长

3.全面积T=S+A

【棱台】:

1.体积V=(A1+A2+sqrt(A1A2))h/3,A1.A2为上下底面积,h为高

(以下为正棱台)

2.侧面积S=(p1+p2)L/2,p1.p2为上下底面周长,l为斜高

3.全面积T=S+A1+A2

【圆柱】:

1.侧面积S=2PIrh

2.全面积T=2PIr(h+r)

3.体积V=PIr^2h

【圆锥】:

1.母线L=sqrt(h^2+r^2)

2.侧面积S=PIrl

3.全面积T=PIr(L+r)

4.体积V=PIr^2h/3

【圆台】:

1.母线L=sqrt(h^2+(r1-r2)^2)

2.侧面积S=PI(r1+r2)L

3.全面积T=PIr1(L+r1)+PIr2(L+r2)

4.体积V=PI(r1^2+r2^2+r1r2)h/3

【球】:

1.全面积T=4PIr^2

2.体积V=4PIr^3/3

【球台】:

1.侧面积S=2PIrh

2.全面积T=PI(2rh+r1^2+r2^2)

3.体积V=PIh(3(r1^2+r2^2)+h^2)/6

【球扇形】:

1.全面积T=PIr(2h+r0),h为球冠高,r0为球冠底面半径

2.体积V=2PIr^2h/3

Euler的任意四面体体积公式(已知边长求体积)

 

已知4点坐标求体积(其中四个点的坐标分别为(x1,y1,z1),(x2,y2,z2),(x3,y3,z3),(x4,y4,z4)

注意事项:

1.注意舍入方式(0.5的舍入方向);防止输出-0.

2.几何题注意多测试不对称数据.

3.整数几何注意xmult和dmult是否会出界;

符点几何注意eps的使用.

4.避免使用斜率;注意除数是否会为0.

5.公式一定要化简后再代入.

6.判断同一个2*PI域内两角度差应该是

abs(a1-a2)pi+pi-beta;

相等应该是

abs(a1-a2)pi+pi-eps;

7.需要的话尽量使用atan2,注意:

atan2(0,0)=0,

atan2(1,0)=pi/2,atan2(-1,0)=-pi/2,atan2(0,1)=0,atan2(0,-1)=pi.

8.crossproduct=|u|*|v|*sin(a)

dotproduct=|u|*|v|*cos(a)

9.(P1-P0)x(P2-P0)结果的意义:

正:

顺时针(0,pi)内

负:

逆时针(0,pi)内

0:

,共线,夹角为0或pi

(2)ComputationalGeometry2008

#include

#include

#include

#include

#include

#include

usingnamespacestd;

#defineeps1e-6

#definepiacos(-1)

#defineMaxNode1000

#definesqr(a)((a)*(a))

#defineIsZero(a)(fabs(a)

#definesame(a,b)(fabs((a)-(b))

#definedot(a,b)(a.x*b.x+a.y*b.y)

#definemax(a,b)((a)>(b)?

(a):

(b))

#definemin(a,b)((a)<(b)?

(a):

(b))

#definecross(a,b)(a.x*b.y-a.y*b.x)

#defineleft(a,b,c)(multi(a,b,c)>0)

#definetriArea(a,b,c)(fabs(multi(a,b,c)/2))

#definePointInCircle2(p,c)(dis2(p,c.center)<=c.r)

#definedis2(a,b)sqrt(sqr(a.x-b.x)+sqr(a.y-b.y))

#definedis3(a,b)sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)+sqr(a.z-b.z))

#definemulti(a,b,c)(((double)b.x-a.x)*(c.y-a.y)-((double)c.x-a.x)*(b.y-a.y))

structpoint

{

doublex,y;

pointoperator-(point&a)

{

pointb;

b.x=x-a.x;

b.y=y-a.y;

returnb;

}

};

structline

{

doublea,b,c;

};

structcircle

{

pointcenter;

doubler;

};

structpolygon

{

intn;

pointp[MaxNode];

};

doublepolygonArea(polygonpoly)

{

//已知多边形各顶点的坐标,求其面积

doublearea=0.0;

intn=poly.n;

for(inti=1;i<=n;i++)

area+=(poly.p[i-1].x*poly.p[i%n].y-poly.p[i%n].x*poly.p[i-1].y);

returnfabs(area)/2;

}

intPointInTriangle(pointp,pointa,pointb,pointc)

{

returnsame(triArea(a,b,c),triArea(p,a,b)

+triArea(p,b,c)+triArea(p,c,a));

}

doubleget_angle(pointcenter,pointp)

{

//以center为原点,p的斜角

pointb=p-center;

doublea;

if(IsZero(b.x))

{

if(b.y>0)returnpi/2;

returnpi*3/2;

}

else

{

a=atan(b.y/b.x);

if(b.x<0)a+=pi;

if(a<0)a+=2*pi;

returna;

}

}

linelineFromSegment(pointp1,pointp2)

{

//线段所在直线,返回直线方程的三个系统

linetmp;

tmp.a=p2.y-p1.y;

tmp.b=p1.x-p2.x;

tmp.c=p2.x*p1.y-p1.x*p2.y;

returntmp;

}

intOn_Segment(pointp1,pointp2,pointp3)

{

if(p1.xmin(p2.x,p3.x)

&&p1.ymin(p2.y,p3.y))return1;

return0;

}

intisIntersected(points1,pointe1,points2,pointe2)

{

intd1,d2,d3,d4;

d1=multi(s1,s2,e1);

d2=multi(s1,e1,e2);

d3=multi(s2,s1,e2);

d4=multi(s2,e2,e1);

if(d1*d2>0&&d3*d4>0)return1;

if(d1==0&&On_Segment(s2,s1,e1))return1;

if(d2==0&&On_Segment(e2,s1,e1))return1;

if(d3==0&&On_Segment(s1,s2,e2))return1;

if(d4==0&&On_Segment(e1,s2,e2))return1;

return0;

}

intisIntersected

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1