当前位置:文档之家› 计算几何常用函数

计算几何常用函数

计算几何常用函数
计算几何常用函数

目录

㈠点的基本运算

1. 平面上两点之间距离 1

2. 判断两点是否重合 1

3. 矢量叉乘 1

4. 矢量点乘 2

5. 判断点是否在线段上 2

6. 求一点饶某点旋转后的坐标 2

7. 求矢量夹角 2

㈡线段及直线的基本运算

1. 点与线段的关系 3

2. 求点到线段所在直线垂线的垂足 4

3. 点到线段的最近点 4

4. 点到线段所在直线的距离 4

5. 点到折线集的最近距离 4

6. 判断圆是否在多边形内 5

7. 求矢量夹角余弦 5

8. 求线段之间的夹角 5

9. 判断线段是否相交 6

10.判断线段是否相交但不交在端点处 6

11.求线段所在直线的方程 6

12.求直线的斜率 7

13.求直线的倾斜角 7

14.求点关于某直线的对称点 7

15.判断两条直线是否相交及求直线交点 7

16.判断线段是否相交,如果相交返回交点 7

㈢多边形常用算法模块

1. 判断多边形是否简单多边形 8

2. 检查多边形顶点的凸凹性 9

3. 判断多边形是否凸多边形 9

4. 求多边形面积 9

5. 判断多边形顶点的排列方向,方法一 10

6. 判断多边形顶点的排列方向,方法二 10

7. 射线法判断点是否在多边形内 10

8. 判断点是否在凸多边形内 11

9. 寻找点集的graham算法 12

10.寻找点集凸包的卷包裹法 13

11.判断线段是否在多边形内 14

12.求简单多边形的重心 15

13.求凸多边形的重心 17

14.求肯定在给定多边形内的一个点 17

15.求从多边形外一点出发到该多边形的切线 18

16.判断多边形的核是否存在 19

㈣圆的基本运算

1 .点是否在圆内 20

2 .求不共线的三点所确定的圆 21

㈤矩形的基本运算

1.已知矩形三点坐标,求第4点坐标 22

㈥常用算法的描述 22

㈦补充

1.两圆关系: 24

2.判断圆是否在矩形内: 24

3.点到平面的距离: 25

4.点是否在直线同侧: 25

5.镜面反射线: 25

6.矩形包含: 26

7.两圆交点: 27

8.两圆公共面积: 28

9. 圆和直线关系: 29

10. 内切圆: 30

11. 求切点: 31

12. 线段的左右旋: 31

13.公式: 32

代码:

/* 需要包含的头文件 */

#include

/* 常用的常量定义 */

const double INF = 1E200

const double EP = 1E-10

const int MAXV = 300

const double PI = 3.14159265

/* 基本几何结构 */

struct POINT

{

double x;

double y; POINT(double a=0, double b=0) { x=a; y=b;} //constructo

r

};

struct LINESEG

{

POINT s;

POINT e; LINESEG(POINT a, POINT b) { s=a; e=b;}

LINESEG() { }

};

struct LINE // 直线的解析方程 a*x+b*y+c=0 为统一表示,约

定 a >= 0

{

double a;

double b;

double c; LINE(double d1=1, double d2=-1, double d3=0) {a=d1; b=d2; c=d3;}

};

/********************

* *

* 点的基本运算 *

* *

********************/

double dist(POINT p1,POINT p2) // 返回两点之间欧氏距离

{

return( sqrt( (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y) ) ) ;

}

bool equal_point(POINT p1,POINT p2) // 判断两个点是否重

{

return ( (abs(p1.x-p2.x)

}

/**************************************************************** **************

r=multiply(sp,ep,op),得到(sp-op)*(ep-op)的叉积

r>0:ep在矢量opsp的逆时针方向;

r=0:opspep三点共线;

r<0:ep在矢量opsp的顺时针方向

***************************************************************** **************/

double multiply(POINT sp,POINT ep,POINT op)

{

return((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y));

}

/**************************************************************** ***************

r=dotmultiply(p1,p2,op),得到矢量(p1-op)和(p2-op)的点积,如果两个矢量都非零矢量

r<0:两矢量夹角为锐角;r=0:两矢量夹角为直角;r>0:两矢量夹角为钝角

***************************************************************** **************/

double dotmultiply(POINT p1,POINT p2,POINT p0)

{

return ((p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y));

}

/* 判断点p是否在线段l上,条件:(p在线段l所在的直线上)&& (点p在以线段l 为对角线的矩形内) */

bool online(LINESEG l,POINT p)

{

return((multiply(l.e,p,l.s)==0)

&&( ( (p.x-l.s.x)*(p.x-l.e.x)<=0 )&&( (p.y-l.s.y)*(p.y-l.e.y)<=0 ) ) );

}

// 返回点p以点o为圆心逆时针旋转alpha(单位:弧度)后所在的位置

POINT rotate(POINT o,double alpha,POINT p)

{

POINT tp;

p.x-=o.x;

p.y-=o.y;

tp.x=p.x*cos(alpha)-p.y*sin(alpha)+o.x;

tp.y=p.y*cos(alpha)+p.x*sin(alpha)+o.y;

return tp;

}

/* 返回顶角在o点,起始边为os,终止边为oe的夹角(单位:弧度)

角度小于pi,返回正值

角度大于pi,返回负值

可以用于求线段之间的夹角

*/

double angle(POINT o,POINT s,POINT e)

{

double cosfi,fi,norm;

double dsx = s.x - o.x;

double dsy = s.y - o.y;

double dex = e.x - o.x;

double dey = e.y - o.y;

cosfi=dsx*dex+dsy*dey;

norm=(dsx*dsx+dey*dey)*(dex*dex+dey*dey);

cosfi /= sqrt( norm );

if (cosfi >= 1.0 ) return 0;

if (cosfi <= -1.0 ) return -3.1415926;

fi=acos(cosfi);

if (dsx*dey-dsy*dex>0) return fi; // 说明矢量os 在矢量 oe的顺时针方向

return -fi;

}

/*****************************

* *

* 线段及直线的基本运算 *

* *

*****************************/

/* 判断点与线段的关系,用途很广泛

本函数是根据下面的公式写的,P是点C到线段AB所在直线的垂足

AC dot AB

r = ---------

||AB||^2

(Cx-Ax)(Bx-Ax) + (Cy-Ay)(By-Ay)

= -------------------------------

L^2

r has the following meaning:

r=0 P = A

r=1 P = B

r<0 P is on the backward extension of AB

r>1 P is on the forward extension of AB

0

*/

double relation(POINT p,LINESEG l)

{

LINESEG tl;

tl.s=l.s;

tl.e=p;

return dotmultiply(tl.e,l.e,l.s)/(dist(l.s,l.e)*dist(l.s,l.e)); }

// 求点C到线段AB所在直线的垂足 P

POINT perpendicular(POINT p,LINESEG l)

{

double r=relation(p,l);

POINT tp;

tp.x=l.s.x+r*(l.e.x-l.s.x);

tp.y=l.s.y+r*(l.e.y-l.s.y);

return tp;

}

/* 求点p到线段l的最短距离,并返回线段上距该点最近的点np

注意:np是线段l上到点p最近的点,不一定是垂足 */

double ptolinesegdist(POINT p,LINESEG l,POINT &np)

{

double r=relation(p,l);

if(r<0)

{

np=l.s;

return dist(p,l.s);

}

if(r>1)

{

np=l.e;

return dist(p,l.e);

}

np=perpendicular(p,l);

return dist(p,np);

}

// 求点p到线段l所在直线的距离,请注意本函数与上个函数的区别

double ptoldist(POINT p,LINESEG l)

{

return abs(multiply(p,l.e,l.s))/dist(l.s,l.e);

}

/* 计算点到折线集的最近距离,并返回最近点.

注意:调用的是ptolineseg()函数 */

double ptopointset(int vcount,POINT pointset[],POINT p,POINT &q) {

int i;

double cd=double(INF),td;

LINESEG l;

POINT tq,cq;

for(i=0;i

{

l.s=pointset[i];

l.e=pointset[i+1];

td=ptolinesegdist(p,l,tq);

if(td

{

cd=td;

cq=tq;

}

}

q=cq;

return cd;

}

/* 判断圆是否在多边形内.ptolineseg()函数的应用2 */

bool CircleInsidePolygon(int vcount,POINT center,double radius,PO INT polygon[])

{

POINT q;

double d;

q.x=0;

q.y=0;

d=ptopointset(vcount,polygon,center,q);

if(d

return true;

else

return false;

}

/* 返回两个矢量l1和l2的夹角的余弦(-1 --- 1)注意:如果想从余弦求夹角的话,注意反余弦函数的定义域是从 0到pi */

double cosine(LINESEG l1,LINESEG l2)

{

return (((l1.e.x-l1.s.x)*(l2.e.x-l2.s.x) +

(l1.e.y-l1.s.y)*(l2.e.y-l2.s.y))/(dist(l1.e,l1.s)*dist(l2.e,l2.s) )) );

}

// 返回线段l1与l2之间的夹角单位:弧度范围(-pi,pi)

double lsangle(LINESEG l1,LINESEG l2)

{

POINT o,s,e;

o.x=o.y=0;

s.x=l1.e.x-l1.s.x;

s.y=l1.e.y-l1.s.y;

e.x=l2.e.x-l2.s.x;

e.y=l2.e.y-l2.s.y;

return angle(o,s,e);

}

// 如果线段u和v相交(包括相交在端点处)时,返回true

bool intersect(LINESEG u,LINESEG v)

{

return( (max(u.s.x,u.e.x)>=min(v.s.x,v.e.x))&& //排斥实验

(max(v.s.x,v.e.x)>=min(u.s.x,u.e.x))&&

(max(u.s.y,u.e.y)>=min(v.s.y,v.e.y))&&

(max(v.s.y,v.e.y)>=min(u.s.y,u.e.y))&&

(multiply(v.s,u.e,u.s)*multiply(u.e,v.e,u.s)>=0)&& //跨立实验

(multiply(u.s,v.e,v.s)*multiply(v.e,u.e,v.s)>=0));

}

// (线段u和v相交)&&(交点不是双方的端点) 时返回true

bool intersect_A(LINESEG u,LINESEG v)

{

return((intersect(u,v))&&

(!online(u,v.s))&&

(!online(u,v.e))&&

(!online(v,u.e))&&

(!online(v,u.s)));

}

// 线段v所在直线与线段u相交时返回true;方法:判断线段u是否跨立线段v bool intersect_l(LINESEG u,LINESEG v)

{

return multiply(u.s,v.e,v.s)*multiply(v.e,u.e,v.s)>=0;

}

// 根据已知两点坐标,求过这两点的直线解析方程: a*x+b*y+c = 0 (a >= 0) LINE makeline(POINT p1,POINT p2)

{

LINE tl;

int sign = 1;

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

if(tl.a<0)

{

sign = -1;

tl.a=sign*tl.a;

}

tl.b=sign*(p1.x-p2.x);

tl.c=sign*(p1.y*p2.x-p1.x*p2.y);

return tl;

}

// 根据直线解析方程返回直线的斜率k,水平线返回 0,竖直线返回 1e200

double slope(LINE l)

{

if(abs(l.a) < 1e-20)return 0;

if(abs(l.b) < 1e-20)return INF;

return -(l.a/l.b);

}

// 返回直线的倾斜角alpha ( 0 - pi)

double alpha(LINE l)

{

if(abs(l.a)< EP)return 0;

if(abs(l.b)< EP)return PI/2;

double k=slope(l);

if(k>0)

return atan(k);

else

return PI+atan(k);

}

// 求点p关于直线l的对称点

POINT symmetry(LINE l,POINT p)

{

POINT tp;

tp.x=((l.b*l.b-l.a*l.a)*p.x-2*l.a*l.b*p.y-2*l.a*l.c)/(l.a*l.a+ l.b*l.b);

tp.y=((l.a*l.a-l.b*l.b)*p.y-2*l.a*l.b*p.x-2*l.b*l.c)/(l.a*l.a+ l.b*l.b);

return tp;

}

// 如果两条直线 l1(a1*x+b1*y+c1 = 0), l2(a2*x+b2*y+c2 = 0)相交,返回true,且返回交点p

bool lineintersect(LINE l1,LINE l2,POINT &p) // 是 L1,L2

{

double d=l1.a*l2.b-l2.a*l1.b;

if(abs(d)

return false;

p.x = (l2.c*l1.b-l1.c*l2.b)/d;

p.y = (l2.a*l1.c-l1.a*l2.c)/d;

return true;

}

// 如果线段l1和l2相交,返回true且交点由(inter)返回,否则返回false bool intersection(LINESEG l1,LINESEG l2,POINT &inter)

{

LINE ll1,ll2;

ll1=makeline(l1.s,l1.e);

ll2=makeline(l2.s,l2.e);

if(lineintersect(ll1,ll2,inter))

{

return online(l1,inter);

}

else

return false;

}

/******************************

* *

* 多边形常用算法模块 *

* *

******************************/

// 如果无特别说明,输入多边形顶点要求按逆时针排列

/*

返回值:输入的多边形是简单多边形,返回true

要求:输入顶点序列按逆时针排序

说明:简单多边形定义:

1:循环排序中相邻线段对的交是他们之间共有的单个点

2:不相邻的线段不相交

本程序默认第一个条件已经满足

*/

bool issimple(int vcount,POINT polygon[])

{

int i,cn;

LINESEG l1,l2;

for(i=0;i

{

l1.s=polygon[i];

l1.e=polygon[(i+1)%vcount];

cn=vcount-3;

while(cn)

{

l2.s=polygon[(i+2)%vcount];

l2.e=polygon[(i+3)%vcount];

if(intersect(l1,l2))

break;

cn--;

}

if(cn)

return false;

}

return true;

}

// 返回值:按输入顺序返回多边形顶点的凸凹性判断,bc[i]=1,iff:第i个顶点是凸顶点

void checkconvex(int vcount,POINT polygon[],bool bc[])

{

int i,index=0;

POINT tp=polygon[0];

for(i=1;i

{

if(polygon[i].y

tp=polygon[i];

index=i;

}

}

int count=vcount-1;

bc[index]=1;

while(count) // 判断凸凹性

{

if(multiply(polygon[(index+1)%vcount],polygon[(index+2)%vcount],p olygon[index])>=0 )

bc[(index+1)%vcount]=1;

else

bc[(index+1)%vcount]=0;

index++;

count--;

}

}

// 返回值:多边形polygon是凸多边形时,返回true

bool isconvex(int vcount,POINT polygon[])

{

bool bc[MAXV];

checkconvex(vcount,polygon,bc);

for(int i=0;i

if(!bc[i])

return false;

return true;

}

// 返回多边形面积(signed);输入顶点按逆时针排列时,返回正值;否则返回负值double area_of_polygon(int vcount,POINT polygon[])

{

int i;

double s;

if (vcount<3) return 0;

s=polygon[0].y*(polygon[vcount-1].x-polygon[1].x);

for (i=1;i

s+=polygon[i].y*(polygon[(i-1)].x-polygon[(i+1)%vcount].x); return s/2;

}

// 如果输入顶点按逆时针排列,返回true

bool isconterclock(int vcount,POINT polygon[])

{

return area_of_polygon(vcount,polygon)>0;

}

// 另一种判断多边形顶点排列方向的方法

bool isccwize(int vcount,POINT polygon[])

{

int i,index;

POINT a,b,v;

v=polygon[0];

index=0;

for(i=1;i

{

if(polygon[i].y

index=i;

}

}

a=polygon[(index-1+vcount)%vcount]; // 顶点v的前一顶点

b=polygon[(index+1)%vcount]; // 顶点v的后一顶点

return multiply(v,b,a)>0;

}

/* 射线法判断点q与多边形polygon的位置关系,要求polygon为简单多边形,顶点逆时针排列

如果点在多边形内:返回0

如果点在多边形边上:返回1

如果点在多边形外:返回2

*/

int insidepolygon(int vcount,POINT Polygon[],POINT q)

{

int c=0,i,n;

LINESEG l1,l2;

bool bintersect_a,bonline1,bonline2,bonline3;

double r1,r2;

l1.s=q;

l1.e=q;

l1.e.x=double(INF);

n=vcount;

for (i=0;i

{

l2.s=Polygon[i];

l2.e=Polygon[(i+1)%n];

if(online(l2,q))return 1; // 如果点在边上,返回1

if ( (bintersect_a=intersect_A(l1,l2))|| // 相交且不在端点

(

(bonline1=online(l1,Polygon[(i+1)%n]))&& // 第二个端点在射线上

(

(!(bonline2=online(l1,Polygon[(i+2)%n])))&& /* 前一个端点和后一个

端点在射线两侧 */

((r1=multiply(Polygon[i],Polygon[(i+1)%n],l1.s)*multiply(Polygon[ (i+1)%n],Polygon[(i+2)%n],l1.s))>0) ||

(bonline3=online(l1,Polygon[(i+2)%n]))&& /* 下一条边是水平线,

前一个端点和后一个端点在射线两侧 */

((r2=multiply(Polygon[i],Polygon[(i+2)%n],l1.s)*multiply(Po lygon[(i+2)%n],

Polygon[(i+3)%n],l1.s))>0)

)

)

) c++;

}

if(c%2 == 1)

return 0;

else

return 2;

}

// 点q是凸多边形polygon内时,返回true;注意:多边形polygon一定要是凸多边形

bool InsideConvexPolygon(int vcount,POINT polygon[],POINT q) // 可用于三角形!

{

POINT p;

LINESEG l;

int i;

p.x=0;p.y=0;

for(i=0;i

{

p.x+=polygon[i].x;

p.y+=polygon[i].y;

}

p.x /= vcount;

p.y /= vcount;

for(i=0;i

{

l.s=polygon[i];l.e=polygon[(i+1)%vcount];

if(multiply(p,l.e,l.s)*multiply(q,l.e,l.s)<0) /* 点p和点q在边l的两侧,说明

点q肯定在多边形外 */

break;

}

return (i==vcount);

}

/**********************************************

寻找凸包的graham 扫描法

PointSet为输入的点集;

ch为输出的凸包上的点集,按照逆时针方向排列;

n为PointSet中的点的数目

len为输出的凸包上的点的个数

**********************************************/

void Graham_scan(POINT PointSet[],POINT ch[],int n,int &len)

{

int i,j,k=0,top=2;

POINT tmp;

// 选取PointSet中y坐标最小的点PointSet[k],如果这样的点有多个,则取最左边的一个

for(i=1;i

if ( PointSet[i].y

(PointSet[i].y==PointSet[k].y) && (PointSet[i].x

k=i;

tmp=PointSet[0];

PointSet[0]=PointSet[k];

PointSet[k]=tmp; // 现在PointSet中y坐标最小的点在PointSet[0]

for (i=1;i

的按照距离PointSet[0]从近到远进行排序 */

{

k=i;

for (j=i+1;j

if ( multiply(PointSet[j],PointSet[k],PointSet[0])>0 || // 极角更小

(multiply(PointSet[j],PointSet[k],PointSet[0])==0) && /* 极角相等,

距离更

短 */ dist(PointSet[0],PointSet[j])

k=j;

tmp=PointSet[i];

PointSet[i]=PointSet[k];

PointSet[k]=tmp;

}

ch[0]=PointSet[0];

ch[1]=PointSet[1];

ch[2]=PointSet[2];

for (i=3;i

{

while (multiply(PointSet[i],ch[top],ch[top-1])>=0) top--;

ch[++top]=PointSet[i];

}

len=top+1;

}

// 卷包裹法求点集凸壳,参数说明同graham算法

void ConvexClosure(POINT PointSet[],POINT ch[],int n,int &len) {

int top=0,i,index,first;

double curmax,curcos,curdis;

POINT tmp;

LINESEG l1,l2;

bool use[MAXV];

tmp=PointSet[0];

index=0;

// 选取y最小点,如果多于一个,则选取最左点

for(i=1;i

{

if(PointSet[i].y

{

index=i;

}

use[i]=false;

}

tmp=PointSet[index];

first=index;

use[index]=true;

index=-1;

ch[top++]=tmp;

tmp.x-=100;

l1.s=tmp;

l1.e=ch[0];

l2.s=ch[0];

while(index!=first)

{

curmax=-100;

curdis=0;

// 选取与最后一条确定边夹角最小的点,即余弦值最大者

for(i=0;i

{

if(use[i])continue;

l2.e=PointSet[i];

curcos=cosine(l1,l2); // 根据cos值求夹角余弦,范围在(-1 -- 1 )

if(curcos>curmax || fabs(curcos-curmax)<1e-6 && dist(l2.s,l2.e)>c urdis)

{

curmax=curcos;

index=i;

curdis=dist(l2.s,l2.e);

}

}

use[first]=false; //清空第first个顶点标志,使最后能形成封闭的hull

use[index]=true;

ch[top++]=PointSet[index];

l1.s=ch[top-2];

l1.e=ch[top-1];

l2.s=ch[top-1];

}

len=top-1;

}

代码:

/* 判断线段是否在简单多边形内(注意:如果多边形是凸多边形,下面的算法可以化简) 原理:

必要条件一:线段的两个端点都在多边形内;

必要条件二:线段和多边形的所有边都不内交;

用途:1. 判断折线是否在简单多边形内

2. 判断简单多边形是否在另一个简单多边形内

*/

bool LinesegInsidePolygon(int vcount,POINT polygon[],LINESEG l) {

// 判断线端l的端点是否不都在多边形内

if(!insidepolygon(vcount,polygon,l.s)||!insidepolygon(vcount,poly gon,l.e))

return false;

int top=0,i,j;

POINT PointSet[MAXV],tmp;

LINESEG s;

for(i=0;i

s.s=polygon[i];

s.e=polygon[(i+1)%vcount];

if(online(s,l.s)) //线段l的起始端点在线段s上

PointSet[top++]=l.s;

else if(online(s,l.e)) //线段l的终止端点在线段s上

PointSet[top++]=l.e;

else

{

if(online(l,s.s)) //线段s的起始端点在线段l上

PointSet[top++]=s.s;

else if(online(l,s.e)) // 线段s的终止端点在线段l上

PointSet[top++]=s.e;

else

{

if(intersect(l,s)) // 这个时候如果相交,肯定是内交,返回false

return false;

}

}

}

for(i=0;i

y坐标小的排在前面 */

{

for(j=i+1;j

{

if( PointSet[i].x>PointSet[j].x || fabs(PointSet[i].x-PointSet[j] .x)PointSet[j].y )

{

tmp=PointSet[i];

PointSet[i]=PointSet[j];

PointSet[j]=tmp;

}

}

}

for(i=0;i

{

tmp.x=(PointSet[i].x+PointSet[i+1].x)/2; //得到两个相邻交点的中点tmp.y=(PointSet[i].y+PointSet[i+1].y)/2;

if(!insidepolygon(vcount,polygon,tmp))

return false;

}

return true;

/* 求任意简单多边形polygon的重心

需要调用下面几个函数:

void AddPosPart(); 增加右边区域的面积

void AddNegPart(); 增加左边区域的面积

void AddRegion(); 增加区域面积

在使用该程序时,如果把xtr,ytr,wtr,xtl,ytl,wtl设成全局变量就可以使这些函数的形式得到化简,但要注意函数的声明和调用要做相应变化

*/

void AddPosPart(double x, double y, double w, double &xtr, double &ytr, double &wtr)

{

if (abs(wtr + w)<1e-10 ) return; // detect zero regions

xtr = ( wtr*xtr + w*x ) / ( wtr + w );

ytr = ( wtr*ytr + w*y ) / ( wtr + w );

wtr = w + wtr;

return;

}

void AddNegPart(double x, ouble y, double w, double &xtl, double &ytl, double &wtl)

{

if ( abs(wtl + w)<1e-10 )

return; // detect zero regions

xtl = ( wtl*xtl + w*x ) / ( wtl + w );

ytl = ( wtl*ytl + w*y ) / ( wtl + w );

wtl = w + wtl;

return;

}

void AddRegion ( double x1, double y1, double x2, double y2, doub le &xtr, double &ytr,

double &wtr, double &xtl, double &ytl, double &wtl )

{

if ( abs (x1 - x2)< 1e-10 )

return;

if ( x2 > x1 )

{

AddPosPart ((x2+x1)/2, y1/2, (x2-x1) * y1,xtr,ytr,wtr); /* rectan gle 全局

变量变化处 */

AddPosPart ((x1+x2+x2)/3, (y1+y1+y2)/3, (x2-x1)*(y2-y1)/2,xtr,ytr

,wtr);

// triangle 全局变量变化处

}

else

{

AddNegPart ((x2+x1)/2, y1/2, (x2-x1) * y1,xtl,ytl,wtl);

// rectangle 全局变量变化处

AddNegPart ((x1+x2+x2)/3, (y1+y1+y2)/3, (x2-x1)*(y2-y1)/2,xtl,ytl ,wtl);

// triangle 全局变量变化处

}

}

POINT cg_simple(int vcount,POINT polygon[])

{

double xtr,ytr,wtr,xtl,ytl,wtl;

//注意:如果把xtr,ytr,wtr,xtl,ytl,wtl改成全局变量后这里要删去

POINT p1,p2,tp;

xtr = ytr = wtr = 0.0;

xtl = ytl = wtl = 0.0;

for(int i=0;i

{

p1=polygon[i];

p2=polygon[(i+1)%vcount];

AddRegion(p1.x,p1.y,p2.x,p2.y,xtr,ytr,wtr,xtl,ytl,wtl); //全局变量变化处

}

tp.x = (wtr*xtr + wtl*xtl) / (wtr + wtl);

tp.y = (wtr*ytr + wtl*ytl) / (wtr + wtl);

return tp;

}

// 求凸多边形的重心,要求输入多边形按逆时针排序

POINT gravitycenter(int vcount,POINT polygon[])

{

POINT tp;

double x,y,s,x0,y0,cs,k;

x=0;y=0;s=0;

for(int i=1;i

{

x0=(polygon[0].x+polygon[i].x+polygon[i+1].x)/3;

y0=(polygon[0].y+polygon[i].y+polygon[i+1].y)/3; //求当前三角形的重心

cs=multiply(polygon[i],polygon[i+1],polygon[0])/2;

(完整版)MATLAB常用函数大全

一、MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 floor(x):地板函数,即舍去正小数至最近整数ceil(x):天花板函数,即加入正小数至最近整数rat(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开 sign(x):符号函数(Signum function)。 当x<0时,sign(x)=-1; 当x=0时,sign(x)=0; 当x>0时,sign(x)=1。 rem(x,y):求x除以y的馀数 gcd(x,y):整数x和y的最大公因数 lcm(x,y):整数x和y的最小公倍数 exp(x):自然指数 pow2(x):2的指数 log(x):以e为底的对数,即自然对数或 log2(x):以2为底的对数 log10(x):以10为底的对数 二、MATLAB常用的三角函数 sin(x):正弦函数 cos(x):余弦函数

tan(x):正切函数 asin(x):反正弦函数 acos(x):反馀弦函数 atan(x):反正切函数 atan2(x,y):四象限的反正切函数 sinh(x):超越正弦函数 cosh(x):超越馀弦函数 tanh(x):超越正切函数 asinh(x):反超越正弦函数 acosh(x):反超越馀弦函数 atanh(x):反超越正切函数 三、适用於向量的常用函数有: min(x): 向量x的元素的最小值 max(x): 向量x的元素的最大值 mean(x): 向量x的元素的平均值 median(x): 向量x的元素的中位数 std(x): 向量x的元素的标准差 diff(x): 向量x的相邻元素的差 sort(x): 对向量x的元素进行排序(Sorting)length(x): 向量x的元素个数 norm(x): 向量x的欧氏(Euclidean)长度sum(x): 向量x的元素总和 prod(x): 向量x的元素总乘积 cumsum(x): 向量x的累计元素总和cumprod(x): 向量x的累计元素总乘积 dot(x, y): 向量x和y的内积 cross(x, y): 向量x和y的外积 四、MATLAB的永久常数

最新几何图形计算公式汇总

小学数学图形计算公式 (C :周长 S :面积 a :边长、长 、底、上底、棱长 b: 宽 、下底 h: 高 d :直径 r :半径 V:体积 ) 1、长方形周长=(长+宽)×2 C=2(a+b) 长方形面积=长×宽 S=ab 2、正方形周长=边长×4 C = 4a 正方形面积=边长×边长 S = a×a = a 2 3、平行四边形面积=底×高 s=ah 4、三角形面积=底×高÷2 s=ah÷2 三角形高=面积 ×2÷底 h = 2s ÷a 三角形底=面积 ×2÷高 5、梯形面积=(上底+下底)×高÷2 s=(a+b)× h÷2 6、圆的周长=直径×圆周率=2×圆周率×半径 C=лd=2лr d=C π r=C 2π 圆的面积=半径×半径×圆周率 S = πr 2 环形的面积=外圆的面积-内圆的面积 S 环=π(R 2-r 2) 7、长方体的棱长总和 = 长×4 + 宽×4 + 高×4 =(长 + 宽 + 高)×4 长方体表面积=(长×宽+长×高+宽×高)×2 S = 2( ab + ah + bh ) 长方体体积=长×宽×高 = 底面积×高 V=abh = sh 8、正方体的棱长总和=棱长×12 正方体表面积=棱长×棱长×6 S 表 = a×a×6 = 6a 2 正方体体积=棱长×棱长×棱长=底面积×高 V = a×a×a = a 3 = sh 9、圆柱的侧面积=底面周长×高 s 侧=ch=πdh=2πrh 圆柱表面积=侧面积+底面积×2 s 表=s 侧+s 底×2 圆柱体积=底面积×高 V 柱 = sh =πr 2h 10、圆锥体体积=底面积×高×13 V 锥 = 13 sh = 1 3 πr 2h 小学数学图形计算公式 (C :周长 S :面积 a :边长、长 、底、上底、棱长 b: 宽 、下底 h: 高 d :直径 r :半径 V:体积 ) 1、长方形周长=(长+宽)×2 C=2(a+b) 长方形面积=长×宽 S=ab 2、正方形周长=边长×4 C = 4a 正方形面积=边长×边长 S = a×a = a 2 3、平行四边形面积=底×高 s=ah 4、三角形面积=底×高÷2 s=ah÷2 三角形高=面积 ×2÷底 h = 2s ÷a 三角形底=面积 ×2÷高 5、梯形面积=(上底+下底)×高÷2 s=(a+b)× h÷2 6、圆的周长=直径×圆周率=2×圆周率×半径 C=лd=2лr d=C π r=C 2π 圆的面积=半径×半径×圆周率 S = πr 2 环形的面积=外圆的面积-内圆的面积 S 环=π(R 2-r 2) 7、长方体的棱长总和 = 长×4 + 宽×4 + 高×4 =(长 + 宽 + 高)×4 长方体表面积=(长×宽+长×高+宽×高)×2 S = 2( ab + ah + bh ) 长方体体积=长×宽×高 = 底面积×高 V=abh = sh 8、正方体的棱长总和=棱长×12 正方体表面积=棱长×棱长×6 S 表 = a×a×6 = 6a 2 正方体体积=棱长×棱长×棱长=底面积×高 V = a×a×a = a 3 = sh 9、圆柱的侧面积=底面周长×高 s 侧=ch=πdh=2πrh 圆柱表面积=侧面积+底面积×2 s 表=s 侧+s 底×2 圆柱体积=底面积×高 V 柱 = sh =πr 2h 10、圆锥体体积=底面积×高×13 V 锥 = 13 sh = 1 3 πr 2h 中小学教师信息技术考试理论试题 一选择题(40分,每一题1分) 1.下面选项是对信息的实质的理解和说明,其中错误的选项是________. A. 信息就是计算机的处理对象 B. 信息就是关于事物运动的状态和规律的知识 C. 信息就是信息,既不是物质,也不是能量 D. 信息就是人类同外部世界进行交换的内容的名称 2. 信息技术在教学中常用作获取学习资源的工具,人们常说,"因特网是知识的海洋".

Excel函数公式完整版

EXCEL函数公式大全(完整) 函数说明 CALL调用动态链接库或代码源中的过程 EUROCONVERT用于将数字转换为欧元形式,将数字由欧元形式转换为欧元成员国货币形式,或利用欧元作为中间货币将数字由某一欧元成员国货币转化为另一欧元成员国 货币形式(三角转换关系) GETPIVOTDATA返回存储在数据透视表中的数据 REGISTER.ID返回已注册过的指定动态链接库(DLL) 或代码源的注册号 SQL.REQUEST连接到一个外部的数据源并从工作表中运行查询,然后将查询结果以数组的形式返回,无需进行宏编程 ?数学和三角函数 ?统计函数 ?文本函数 加载宏和自动化函数 多维数据集函数 函数说明 CUBEKPIMEMBER返回重要性能指标(KPI) 名称、属性和度量,并显示单元格中的名 称和属性。KPI 是一项用于监视单位业绩的可量化的指标,如每月 总利润或每季度雇员调整。 CUBEMEMBER返回多维数据集层次结构中的成员或元组。用于验证多维数据集内 是否存在成员或元组。 CUBEMEMBERPROPERTY返回多维数据集内成员属性的值。用于验证多维数据集内是否存在 某个成员名并返回此成员的指定属性。 CUBERANKEDMEMBER返回集合中的第n 个或排在一定名次的成员。用于返回集合中的一 个或多个元素,如业绩排在前几名的销售人员或前10 名学生。 CUBESET通过向服务器上的多维数据集发送集合表达式来定义一组经过计算 的成员或元组(这会创建该集合),然后将该集合返回到Microsoft Office Excel。 CUBESETCOUNT返回集合中的项数。 CUBEVALUE返回多维数据集内的汇总值。

高中数学常用反三角函数公式

反三角函数公式 arc sin x + arc sin y = arc sin x – arc sin y = arc cos x + arc cos y = arc cos x – arc cos y = arc tan x + arc tan y = arc tan x – arc tan y = 2 arc sin x = 2 arc cos x = 2 arc tanx = cos (n arc cos x) = .

反三角函数图像与特征 反正弦曲线图像与特征反余弦曲线图像与特征 拐点(同曲线对称中心):,该点切线斜率为1 拐点(同曲线对称中心): ,该点切线斜率为-1 反正切曲线图像与特征反余切曲线图像与特征 拐点(同曲线对称中心):,该点切线斜率 为1 拐点: ,该点切线斜率为-1 渐近线: 渐近线: .

名称 反正割曲线反余割曲线 方程 图像 顶点 渐近线 反三角函数的定义域与主值范围 函数主值记号定义域主值范围 反正弦若,则 反余弦若,则 反正切若,则 反余切若,则 反正割若,则 反余割若,则 式中n为任意整数. .

反三角函数的相互关系 arc sin x = arc cos x = arc tan x = arc cot x = sin x = x-x3/3!+x5/5!-...(-1)k-1*x2k-1/(2k-1)!+... (-∞= -1 And x < -0.5 Then ArcSin = -Atn(Sqr(1 - x * x) / x) - 2 * Atn(1) If x >= -0.5 And x <= 0.5 Then ArcSin = Atn(x / Sqr(1 - x * x)) If x > 0.5 And x <= 1 Then ArcSin = -Atn(Sqr(1 - x * x) / x) + 2 * Atn(1) End Function .

考勤工资计算常用Excel函数

Excel函数应用之逻辑函数 编者语:Excel是办公室自动化中非常重要的一款软件,很多巨型国际企业都是依靠Excel 进行数据管理。它不仅仅能够方便的处理表格和进行图形分析,其更强大的功能体现在对数据的自动处理和计算,然而很多缺少理工科背景或是对Excel强大数据处理功能不了解的人却难以进一步深入。编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel 的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel 函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数应用》系列,将每周更新,逐步系统的介绍Excel各类函数及其应用,敬请关注! 用来判断真假值,或者进行复合检验的Excel函数,我们称为逻辑函数。在Excel中提供了六种逻辑函数。即AND、OR、NOT、FALSE、IF、TRUE函数。 一、AND、OR、NOT函数 这三个函数都用来返回参数逻辑值。详细介绍见下: (一)AND函数 所有参数的逻辑值为真时返回TRUE;只要一个参数的逻辑值为假即返回FALSE。简言之,就是当AND的参数全部满足某一条件时,返回结果为TRUE,否则为FALSE。 语法为AND(logical1,logical2, ...),其中Logical1, logical2, ... 表示待检测的1 到30 个条件值,各条件值可能为TRUE,可能为FALSE。参数必须是逻辑值,或者包含逻辑值的数组或引用。举例说明: 1、在B2单元格中输入数字50,在C2中写公式=AND(B2>30,B2<60)。由于B2等于50的确大于30、小于60。所以两个条件值(logical)均为真,则返回结果为TRUE。 图1 AND函数示例1 2、如果B1-B3 单元格中的值为TRUE、FALSE、TRUE,显然三个参数并不都为真,所以在B4单元格中的公式=AND(B1:B3) 等于FALSE

常用计算公式和函数

公式运用: 请在注册后使用:音视频转换工具软件 名称: crsky 注册码: WHAT-DOYO-UWAN-TTOD-00CE-58F8-5D10-2F1A 常用公式: 一、 1:求和:SUM 可以利用来算一行或一列数字的总和。如算总分。 2:求平均数:average 可以利用来算一行或一列数字的平均值。如算平均分 3:求非空单元格的个数:counta /count 可以利用来算一行或一列(有内容/有数字)的单元格个数。如算参加考试的学生数。4:求满足条件的非空单元格的个数:countif 可以利用来算一行或一列有内容的同时又满足某个条件的单元格个数。如算满足60分以上的学生人数,即及格人数。 5:标准差:STDEVP 可以利用来算一行或一列数字的标准差。标准差是一组数值自平均值分散开来的程度的一种测量观念。一个较大的标准差,代表大部分的数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值。反映学生的分数分化差异。 二、自由公式的运用 1.加减乘除四则运算:电脑键盘的右边,小键盘上有。 加:+ (如:=A1+A2)也可: =5+5 减:- (如:=A1-A2)也可: =5-5 乘:* (如:=A1*A2)也可: =5*5 除:/ (如:=A1/A2)也可: =5/5 2.组合公式运算: A.算及格率:组合公式原理:知道及格人数和总人数。利用及格人数除以总人数 及格人数公式:countif来计算。=COUNTIF(A1:A50,”>=60”) 总人数:可以手写如50,也可以counta来算。 公式组合:= COUNTIF(A1:A50,”>=60”)/ counta(A1:A50) B.算优秀率:组合公式原理:知道优秀人数和总人数。利用优秀人数除以总人数 优秀人数公式:countif来计算。 总人数:可以手写如50,也可以counta来算。 公式组合:= COUNTIF(A1:A50,”>=80”)/ counta(A1:A50) C.算难度系数:组合公式原理:知道平均分和总分。利用平均分除以总分 平均分公式:average来计算。 总分:试卷小题有标注,如3分 公式组合:= average (A1:A50)/ 3 D.选择题选A率:组合公式原理:知道选择了A的总数和班级总人数。利用选择了A的总数除以班级总人数 选择A的总数公式:countif来计算。

常用的三角函数公式大全

三角函数公式 两角和公式 sin(A+B) = sinAcosB+cosAsinB sin(A-B) = sinAcosB-cosAsinB cos(A+B) = cosAcosB-sinAsinB cos(A-B) = cosAcosB+sinAsinB tan(A+B) =tanAtanB -1tanB tanA + tan(A-B) =tanAtanB 1tanB tanA +- cot(A+B) =cotA cotB 1-cotAcotB + cot(A-B) =cotA cotB 1cotAcotB -+ 倍角公式 tan2A = A tan 12tanA 2- Sin2A=2SinA?CosA Cos2A = Cos 2A-Sin 2A =2Cos 2A-1=1-2sin 2A 三倍角公式 sin3A = 3sinA-4(sinA)3 cos3A = 4(cosA)3-3cosA tan3a = tana ·tan(3π+a)·tan(3 π-a) 半角公式 sin(2A )=2 cos 1A - cos(2A )=2 cos 1A + tan(2A )=A A cos 1cos 1+- cot( 2A )=A A cos 1cos 1-+

tan( 2 A )=A A sin cos 1-=A A cos 1sin + 和差化积

sina+sinb=2sin 2b a +cos 2 b a - sina-sinb=2cos 2b a +sin 2 b a - cosa+cosb = 2cos 2b a +cos 2 b a - cosa-cosb = -2sin 2b a +sin 2 b a - tana+tanb=b a b a cos cos )sin(+ 积化和差 sinasinb = - 2 1[cos(a+b)-cos(a-b)] cosacosb = 2 1[cos(a+b)+cos(a-b)] sinacosb = 2 1[sin(a+b)+sin(a-b)] cosasinb = 21[sin(a+b)-sin(a-b)] 万能公式 sina=2 )2 (tan 12tan 2a a + cosa=2 2 )2 (tan 1)2(tan 1a a +- tana=2 )2(tan 12tan 2a a - 其它公式 a?sina+b?cosa=)b (a 22+×sin(a+c) [其中tanc=a b ] a?sin(a)-b?cos(a) = )b (a 22+×cos(a-c) [其中tan(c)=b a ] 1+sin(a) =(sin 2a +cos 2 a )2 1-sin(a) = (sin 2a -cos 2 a )2

三角函数常用公式

数学必修4三角函数常用公式及结论 一、三角函数与三角恒等变换 2、同角三角函数公式 sin 2α+ cos 2α= 1 α αcos tan = 3、二倍角的三角函数公式 sin2α= 2sin αcos α cos2α=2cos 2α-1 = 1-2 sin 2α= cos 2α- sin 2α α α α2tan 1tan 22tan -= 45、升幂公式 1±sin2α= (sin α±cos α) 2 1 + cos2α=2 cos 2α 1- cos2α= 2 sin 2α 6、两角和差的三角函数公式 sin (α±β) = sin αcos β土cos αsin β cos (α±β) = cos αcos β干sin αsin β ()β αβαβαtan tan 1tan tan tan μ±= ± 7、两角和差正切公式的变形: tan α±tan β= tan (α±β) (1干tan αtan β) ααtan 1tan 1-+=ααtan 45tan 1tan 45tan ?-+?= tan (4π+α) ααtan 1tan 1+-=α α tan 45tan 1tan 45tan ?+-?= tan (4π-α) 8、两角和差正弦公式的变形(合一变形)

10、三角函数的诱导公式 “奇变偶不变,符号看象限。” sin (π-α) = sin α, cos (π-α) = -cos α, tan (π-α) = -tan α; sin (π+α) = -sin α cos (π+α) = -cos α tan (π+α) = tan α sin (2π-α) = -sin α cos (2π-α) = cos α tan (2π-α) = -tan α sin (-α) = -sin α cos (-α) = cos α tan (-α) = -tan α sin (2 π-α) = cos α cos (2 π-α) = sin α sin (2 π+α) = cos α cos (2 π+α) = -sin α 11.三角函数的周期公式 函数sin()y x ω?=+,x ∈R 及函数cos()y x ω?=+,x ∈R(A,ω,?为常数,且A ≠0,ω>0)的周期2T π ω = ;函数 tan()y x ω?=+,,2 x k k Z π π≠+ ∈(A,ω,?为常数,且A ≠0,ω>0)的周期T πω = . 解三角形知识小结和题型讲解 一、 解三角形公式。 1. 正弦定理 2. 余弦定理 在运用余弦定理的计算要准确,同时合理运用余弦定理的变形公式. 3.三角形中三内角的三角函数关系)(π=++C B A ○).tan(tan ),cos(cos ),sin(sin C B A C B A C B A +-=+-=+=(注:二倍角的关系) ○),2 sin(2cos ),2cos(2sin C B A C B A +=+= 5.几个重要的结论 ○B A B A B A cos cos ,sin sin <>?>; ○三内角成等差数列0 120,60=+=?C A B 2(ABC )sin sin sin a b c R R A B C ===?是的外接圆半径2222222222cos 2cos 2cos a b c bc A b a c ac B c a b ab C =+-=+-=+-222 222 222 cos 2cos 2cos 2b c a A bc a c b B ac a b c C ab +-= +-= +-=

Excel常用的函数计算公式大全

EXCEL的常用计算公式大全 一、单组数据加减乘除运算: ①单组数据求加和公式:=(A1+B1) 举例:单元格A1:B1区域依次输入了数据10和5,计算:在C1中输入 =A1+B1 后点击键盘“Enter(确定)”键后,该单元格就自动显示10与5的和15。 ②单组数据求减差公式:=(A1-B1) 举例:在C1中输入 =A1-B1 即求10与5的差值5,电脑操作方法同上; ③单组数据求乘法公式:=(A1*B1) 举例:在C1中输入 =A1*B1 即求10与5的积值50,电脑操作方法同上; ④单组数据求乘法公式:=(A1/B1) 举例:在C1中输入 =A1/B1 即求10与5的商值2,电脑操作方法同上; ⑤其它应用: 在D1中输入 =A1^3 即求5的立方(三次方); 在E1中输入 =B1^(1/3)即求10的立方根 小结:在单元格输入的含等号的运算式,Excel中称之为公式,都是数学里面的基本运算,只不过在计算机上有的运算符号发生了改变——“×”与“*”同、“÷”与“/”同、“^”与“乘方”相同,开方作为乘方的逆运算,把乘方中和指数使用成分数就成了数的开方运算。这些符号是按住电脑键盘“Shift”键同时按住键盘第二排相对应的数字符号即可显示。如果同一列的其它单元格都需利用刚才的公式计算,只需要先用鼠标左键点击一下刚才已做好公式的单元格,将鼠标移至该单元格的右下角,带出现十字符号提示时,开始按住鼠标左键不动一直沿着该单元格依次往下拉到你需要的某行同一列的单元格下即可,即可完成公司自动复制,自动计算。 二、多组数据加减乘除运算: ①多组数据求加和公式:(常用) 举例说明:=SUM(A1:A10),表示同一列纵向从A1到A10的所有数据相加; =SUM(A1:J1),表示不同列横向从A1到J1的所有第一行数据相加; ②多组数据求乘积公式:(较常用) 举例说明:=PRODUCT(A1:J1)表示不同列从A1到J1的所有第一行数据相乘; =PRODUCT(A1:A10)表示同列从A1到A10的所有的该列数据相乘; ③多组数据求相减公式:(很少用) 举例说明:=A1-SUM(A2:A10)表示同一列纵向从A1到A10的所有该列数据相减; =A1-SUM(B1:J1)表示不同列横向从A1到J1的所有第一行数据相减; ④多组数据求除商公式:(极少用) 举例说明:=A1/PRODUCT(B1:J1)表示不同列从A1到J1的所有第一行数据相除; =A1/PRODUCT(A2:A10)表示同列从A1到A10的所有的该列数据相除; 三、其它应用函数代表: ①平均函数 =AVERAGE(:);②最大值函数 =MAX (:);③最小值函数 =MIN (:); ④统计函数 =COUNTIF(:):举例:Countif ( A1:B5,”>60”)

Excel常用的函数计算公式大全(一看就会)

计算机等级考试 =公式名称(参数1,参数2,。。。。。) =sum(计算范围) =average(计算范围) =sumifs(求和范围,条件范围1,符合条件1,条件范围2,符合条件2,。。。。。。) =vlookup(翻译对象,到哪里翻译,显示哪一种,精确匹配) =rank(对谁排名,在哪个范围里排名) =max(范围) =min(范围) =index(列范围,数字) =match(查询对象,范围,0) =mid(要截取的对象,从第几个开始,截取几个) =int(数字) =weekday(日期,2) =if(谁符合什么条件,符合条件显示的内容,不符合条件显示的内容) =if(谁符合什么条件,符合条件显示的内容,if(谁符合什么条件,符合条件显示的内容,不符合条件显示的内容)) EXCEL的常用计算公式大全 一、单组数据加减乘除运算: ①单组数据求加和公式:=(A1+B1) 举例:单元格A1:B1区域依次输入了数据10和5,计算:在C1中输入=A1+B1 后点击键盘“Enter(确定)”键后,该单元格就自动显示10与5的和15。 ②单组数据求减差公式:=(A1-B1) 举例:在C1中输入=A1-B1即求10与5的差值5,电脑操作方法同上; ③单组数据求乘法公式:=(A1*B1) 举例:在C1中输入=A1*B1即求10与5的积值50,电脑操作方法同上; ④单组数据求乘法公式:=(A1/B1) 举例:在C1中输入=A1/B1即求10与5的商值2,电脑操作方法同上; ⑤其它应用: 在D1中输入=A1^3即求5的立方(三次方); 在E1中输入=B1^(1/3)即求10的立方根 小结:在单元格输入的含等号的运算式,Excel中称之为公式,都是数学里面的基本 运算,只不过在计算机上有的运算符号发生了改变——“×”与“*”同、“÷”与 “/”同、“^”与“乘方”相同,开方作为乘方的逆运算,把乘方中和指数使用成分数 就成了数的开方运算。这些符号是按住电脑键盘“Shift”键同时按住键盘第二排 相对应的数字符号即可显示。如果同一列的其它单元格都需利用刚才的公式计算,只 需要先用鼠标左键点击一下刚才已做好公式的单元格,将鼠标移至该单元格的右下 角,带出现十字符号提示时,开始按住鼠标左键不动一直沿着该单元格依次往下拉到 你需要的某行同一列的单元格下即可,即可完成公司自动复制,自动计算。

Excel常用函数公式大全(实用)

Excel常用函数公式大全 1、查找重复内容公式:=IF(COUNTIF(A:A,A2)>1,"重复","")。 2、用出生年月来计算年龄公式:=TRUNC((DAYS360(H6,"2009/8/30",FALSE))/360,0)。 3、从输入的18位身份证号的出生年月计算公式: =CONCATENATE(MID(E2,7,4),"/",MID(E2,11,2),"/",MID(E2,13,2))。 4、从输入的身份证号码内让系统自动提取性别,可以输入以下公式: =IF(LEN(C2)=15,IF(MOD(MID(C2,15,1),2)=1,"男","女"),IF(MOD(MID(C2,17,1),2)=1,"男","女"))公式内的“C2”代表的是输入身份证号码的单元格。 1、求和:=SUM(K2:K56) ——对K2到K56这一区域进行求和; 2、平均数:=AVERAGE(K2:K56) ——对K2 K56这一区域求平均数; 3、排名:=RANK(K2,K$2:K$56) ——对55名学生的成绩进行排名; 4、等级:=IF(K2>=85,"优",IF(K2>=74,"良",IF(K2>=60,"及格","不及格"))) 5、学期总评:=K2*0.3+M2*0.3+N2*0.4 ——假设K列、M列和N列分别存放着学生的“平时总评”、“期中”、“期末”三项成绩; 6、最高分:=MAX(K2:K56) ——求K2到K56区域(55名学生)的最高分; 7、最低分:=MIN(K2:K56) ——求K2到K56区域(55名学生)的最低分; 8、分数段人数统计: (1)=COUNTIF(K2:K56,"100") ——求K2到K56区域100分的人数;假设把结果存放于K57单元格; (2)=COUNTIF(K2:K56,">=95")-K57 ——求K2到K56区域95~99.5分的人数;假设把结果存放于K58单元格; (3)=COUNTIF(K2:K56,">=90")-SUM(K57:K58) ——求K2到K56区域90~94.5分的人数;假设把结果存放于K59单元格; (4)=COUNTIF(K2:K56,">=85")-SUM(K57:K59) ——求K2到K56区域85~89.5分的人数;假设把结果存放于K60单元格;

Excel函数计算公式大全(完整)

E x c e l函数计算公式大 全(完整) -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

EXCEL函数公式大全(完整) 函数说明 CALL调用动态链接库或代码源中的过程 EUROCONVERT用于将数字转换为欧元形式,将数字由欧元形式转换为欧元成员国货币形式,或利用欧元作为中间货币将数字由某一欧元成员国货币转化为另一欧元成员国 货币形式(三角转换关系) GETPIVOTDATA返回存储在数据透视表中的数据 REGISTER.ID返回已注册过的指定动态链接库 (DLL) 或代码源的注册号 SQL.REQUEST连接到一个外部的数据源并从工作表中运行查询,然后将查询结果以数组的形式返回,无需进行宏编程 函数说明 CUBEKPIMEMBER返回重要性能指标 (KPI) 名称、属性和度量,并显示单元格中的名 称和属性。KPI 是一项用于监视单位业绩的可量化的指标,如每月 总利润或每季度雇员调整。 CUBEMEMBER返回多维数据集层次结构中的成员或元组。用于验证多维数据集内 是否存在成员或元组。 CUBEMEMBERPROPERTY返回多维数据集内成员属性的值。用于验证多维数据集内是否存在 某个成员名并返回此成员的指定属性。 CUBERANKEDMEMBER返回集合中的第 n 个或排在一定名次的成员。用于返回集合中的一 个或多个元素,如业绩排在前几名的销售人员或前 10 名学生。 CUBESET通过向服务器上的多维数据集发送集合表达式来定义一组经过计算 的成员或元组(这会创建该集合),然后将该集合返回到 Microsoft Office Excel。 CUBESETCOUNT返回集合中的项数。 CUBEVALUE返回多维数据集内的汇总值。 数据库函数 函数说明 DAVERAGE返回所选数据库条目的平均值 DCOUNT计算数据库中包含数字的单元格的数量 DCOUNTA计算数据库中非空单元格的数量 DGET从数据库提取符合指定条件的单个记录 DMAX 返回所选数据库条目的最大值 DMIN 返回所选数据库条目的最小值 DPRODUCT将数据库中符合条件的记录的特定字段中的值相乘

三角函数常用公式公式及用法

三角函数常用公式及用法 珠海市金海岸中学 唐云辉 1、终边相同的角及其本身在内的角的表示法: S={ | k 360°,k Z},或者 S { | 用法:用来将任意角转化到 0?2的范围以便于计算。 公式中k 的求法: 如是正角就直接除以3600或2,得到的整数 就是我们 要求的k ,剩余的角就是公式中 的;如果是 负角,就先取绝对值然后再去除以 3600或者2,得到 的整数加1后再取相反数就是上述公式中的 k,等于3600或者2减去剩余的角的值。 用法:前者是弧长公式,用以计算圆弧的长度;后者为扇形的面积公式,用以计算扇形的面积。 3.三角形面积公式: 1 , 1 1 1 abc 2 S 』= a h a = ab si nC =—bc si nA = —ac si nB = =2R sin A si n B si nC 2 2 2 4R 2 a sin BsinC 2 sin A 2 2 b sinAsinC c sinAsinB = = =pr= P (P a)(p b)(p c) 2si nB 2sinC 1 ( 其中p -(a 2 4 ?同角关系: b c) , r 为三角形内切圆半径) (1 )、商的关系:① tan =y = sin x cos 用法:一般用来计算三角函数的值。 (2 )、平方关系:sin 2 cos 2 1 行运算,遇到sin cos m 就先平方而后再运算, 遇到sin cos sin 2 cos 2 这类题目就联想 2 2 到分母为"1” =s in cos 进行运算即可。 --------- K (3)、辅助角公式: asin bcos Va 2 b 2 sin( ) (其中 a>0,b>0 ,且 tan —) a 用法:用以将两个异名三角函数转化成同名三角函数,以便于求取相关的三角函数。 5、函数y= Asin( x ) k 的图象及性质:( 0, A 0 ) 2、 L 弧长= n nR R =180 扇 =丄LR 」F 2 2 2 n R 2 360 2k ,k Z} 用法:凡是见了 sin cos m 或者sin cos ?2 sin 2 cos 的形式题目都可以用上述平方关系进

财务常用函数

常用函数 一、投资函数 (一)PV 1.含义:返回投资的现值。现值为一系列未来付款当前值的累积和。例如,借人方的借人款即为贷出方贷款的现值。 2.语法:PV (rate, nper, pmt, fv, type)。其中: rate为各期利率。例如,如果按10%的年利率借人一笔贷款来购买汽车,并按月偿还贷款,则月利率为0.83%(即10%/12)。可以在公式中输人10%/12或0.83%或0.0083作为rate 的值。 nper为总投资(或贷款)期,即该项投资(或贷款)的付款期总数。例如,对于一笔4年期按月偿还的汽车贷款,共有48(即4x12)个偿款期次。可以在公式中输人48作为nper 的值。 pmt为各期所应付给(或得到)的金额,其数值在整个年金期间(或投资期内)保持不变。通常pmt包括本金和利息,但不包括其他费用及税款。例如,10 000元的年利率为12%的4年期汽车贷款的月偿还额为263.33元。可以在公式中输人263.33作为pmt的值。 fv为未来值或在最后一次支付后希望得到的现金余额,如果省略fv,则假设其值为零(一笔贷款的未来值即为零)。例如,如果需要在18年后支付50 000元,则50 000元就是未来值。可以根据保守估计的利率来决定每月的存款额。 type为数字0或1,用以指定各期的付款时间是在期初还是期末。如果省略type,则假设其值为零,期末付款。 说明:应确认所指定的rate和nper单位的一致性。例如,同样是4年期年利率为12%的贷款,如果按月支付,rat。应为12 % /12, nper应为48(即4x12);如果按年支付,rate 应为12%,nper为4。 3.示例。假设要购买一项保险年金,该保险可以在今后20年内于每月未回报500元。此项气金的购买成本为60 000元,假定投资回报率为8。现在可以通过函数PV计算一下这笔投资是否值得。该项年金的现值为: PV(0.08 /12,12*20,500-0)=一59 777.15(元) 结果为负值,因为这是一笔付款,亦即支出现金流。年金59 777.15元的现值小于实际支付的60 000元。因此,这不是一项合算的投资。 (二)NPV 1.含义:基于一系列现金流和固定的各期贴现率,返回一项投资的净现值。投资的净现值是指未来各期支出(负值)和收人(正值)的当前值的总和。 2.语法:NPV (rate, value 1, value 2,…)。其中: rate为各期贴现率,是一固定值。 value 1, value 2,…代表1-29笔支出及收人的参数值。 (1) value 1, value 2,…所属各期间的长度必须相等,而且支付及收人的时间都发生在期末。 (2) NPV按次序使用value 1, value 2,?来注释现金流的次序。所以一定要保证支出和收人的数额按正确的顺序输人。 (3)如果参数是数值、空白单元格、逻辑值或表示数值的文字表达式,则都会计算在内;如果参数是错误值或不能转化为数值的文字,则被忽略。 (4)如果参数是一个数组或引用,只有其中的数值部分计算在内。忽略数组或引用中的

几何计算公式大全

几何体计算公式大全 长方形的面积=长×宽 长方形的周长=(长+宽)×2 正方形的周长=边长×4 正方形的面积=边长×边长 三角形的面积=底×高÷2 平行四边形的面积=底×高 梯形的面积=(上底+下底)×高÷2 直径=半径×2 半径=直径÷2 圆的周长=圆周率×直径= 圆周率×半径×2 圆的面积=圆周率×半径×半径 长方体的表面积= (长×宽+长×高+宽×高)×2 长方体的体积=长×宽×高 正方体的表面积=棱长×棱长×6 正方体的体积=棱长×棱长×棱长 圆柱的侧面积=底面圆的周长×高 圆柱的表面积=上下底面面积+侧面积 圆柱的体积=底面积×高 圆锥的体积=底面积×高÷3 长方体(正方体、圆柱体) 的体积=底面积×高平面图形名称符号周长C与面积S 正方形a—边长C=4a S=a2 长方形a与b-边长C=2(a+b) S=ab 三角形a,b,c-三边长 h-a边上的高 s-周长的一半 A,B,C-内角 其中s=(a+b+c)/2 S=ah/2 =ab/2·sinC =[s(s-a)(s-b)(s-c)]1/2 =a2sinBsinC/(2sinA) 四边形d,D-对角线长 α-对角线夹角S=dD/2·sinα 平行四边形a,b-边长 h-a边的高 α-两边夹角S=ah =absinα 菱形a-边长 α-夹角 D-长对角线长

d-短对角线长S=Dd/2 =a2sinα 梯形a与b-上、下底长 h-高 m-中位线长S=(a+b)h/2 =mh 圆r-半径 d-直径C=πd=2πr S=πr2 =πd2/4 扇形r—扇形半径 a—圆心角度数 C=2r+2πr×(a/360) S=πr2×(a/360) 弓形l-弧长 b-弦长 h-矢高 r-半径α-圆心角的度数S=r2/2·(πα/180-sinα) =r2arccos[(r-h)/r] - (r-h)(2rh-h2)1/2 =παr2/360 - b/2·[r2-(b/2)2]1/2 =r(l-b)/2 + bh/2 ≈2bh/3 圆环R-外圆半径 r-内圆半径 D-外圆直径 d-内圆直径 S=π(R2-r2) =π(D2-d2)/4 椭圆D-长轴 d-短轴S=πDd/4 立方图形 名称符号面积S与体积V 正方体a-边长S=6a2 V=a3 长方体a-长 b-宽 c-高S=2(ab+ac+bc) V=abc 棱柱S-底面积 h-高V=Sh 棱锥S-底面积 h-高V=Sh/3 棱台S1与S2-上、下底面积 h-高V=h[S1+S2+(S1S1)1/2]/3 拟柱体S1-上底面积 S2-下底面积 S0-中截面积

三角函数运算法则

三角函数常用公式:(^表示乘方,例如^2表示平方)正弦函数sinθ=y/r 余弦函数cosθ=x/r 正切函数tanθ=y/x 余切函数cotθ=x/y 正割函数secθ=r/x 余割函数cscθ=r/y 以及两个不常用,已趋于被淘汰的函数: 正矢函数versinθ =1-cosθ 余矢函数vercosθ =1-sinθ 同角三角函数间的基本关系式:· 平方关系: sin^2(α)+cos^2(α)=1 tan^2(α)+1=sec^2(α) cot^2(α)+1=csc^2(α) · 积的关系: sinα=tanα*cosα cosα=cotα*sinα tanα=sinα*secα cotα=cosα*cscα secα=tanα*cscα cscα=secα*cotα ·倒数关系: tanα·cotα=1 sinα·cscα=1 cosα·secα=1 直角三角形ABC中, 角A的正弦值就等于角A的对边比斜边, 余弦等于角A的邻边比斜边 正切等于对边比邻边, 三角函数恒等变形公式· 两角和与差的三角函数: cos(α+β)=cosα·cosβ-sinα·sinβ cos(α-β)=cosα·cosβ+sinα·sinβ sin(α±β)=sinα·cosβ±cosα·sinβ tan(α+β)=(tanα+tanβ)/(1-tanα·tanβ) tan(α-β)=(tanα-tanβ)/(1+tanα·tanβ) · 辅助角公式: Asinα+Bcosα=(A^2+B^2)^(1/2)sin(α+t),其中 sint=B/(A^2+B^2)^(1/2) cost=A/(A^2+B^2)^(1/2) ·倍角公式:si n(2α)=2sinα·cosα=2/(tanα+cotα) cos(2α)=cos^2(α)-sin^2(α)=2cos^2(α)-1=1-2sin^2(α) tan(2α)=2tanα/[1-tan^2(α)] ·

(完整版)excel基本常用函数公式大全

1、查找重复内容公式:=IF(COUNTIF(A:A,A2)>1,"重复","")。 2、用出生年月来计算年龄公式: =TRUNC((DAYS360(H6,"2009/8/30",FALSE))/360,0)。 3、从输入的18位身份证号的出生年月计算公式: =CONCATENATE(MID(E2,7,4),"/",MID(E2,11,2),"/",MID(E2,13,2))。 4、从输入的身份证号码内让系统自动提取性别,可以输入以下公式: =IF(LEN(C2)=15,IF(MOD(MID(C2,15,1),2)=1,"男","女"),IF(MOD(MID(C2,17,1),2)=1,"男","女"))公式内的“C2”代表的是输入身份证号码的单元格。 1、求和:=SUM(K2:K56) ——对K2到K56这一区域进行求和; 2、平均数:=AVERAGE(K2:K56) ——对K2 K56这一区域求平均数; 3、排名:=RANK(K2,K$2:K$56) ——对55名学生的成绩进行排名; 4、等级:=IF(K2>=85,"优",IF(K2>=74,"良",IF(K2>=60,"及格","不及格"))) 5、学期总评:=K2*0.3+M2*0.3+N2*0.4 ——假设K列、M列和N列分别存放着学生的“平时总评”、“期中”、“期末”三项成绩; 6、最高分:=MAX(K2:K56) ——求K2到K56区域(55名学生)的最高分;

7、最低分:=MIN(K2:K56) ——求K2到K56区域(55名学生)的最低分; 8、分数段人数统计: (1)=COUNTIF(K2:K56,"100") ——求K2到K56区域100分的人数;假设把结果存放于K57单元格; (2)=COUNTIF(K2:K56,">=95")-K57 ——求K2到K56区域95~99.5分的人数;假设把结果存放于K58单元格; (3)=COUNTIF(K2:K56,">=90")-SUM(K57:K58) ——求K2到K56区域90~94.5分的人数;假设把结果存放于K59单元格; (4)=COUNTIF(K2:K56,">=85")-SUM(K57:K59) ——求K2到K56区域85~89.5分的人数;假设把结果存放于K60单元格; (5)=COUNTIF(K2:K56,">=70")-SUM(K57:K60) ——求K2到K56区域70~84.5分的人数;假设把结果存放于K61单元格; (6)=COUNTIF(K2:K56,">=60")-SUM(K57:K61) ——求K2到K56区域60~69.5分的人数;假设把结果存放于K62单元格; (7)=COUNTIF(K2:K56,"<60") ——求K2到K56区域60分以下的人数;假设把结果存放于K63单元格;

相关主题
文本预览
相关文档 最新文档