几何基础(1)bulid by 在下李逍遥 at 2016-01-27 22:11
Rating:1763

几何基础(1

点 point

定义 :

struct point

{

double x,y;

};

线 line

定义 :

Struct line

{

Point s,e;

};

精度差

 

Const double eps=1e-8;

Int sgn(double x)

{

If(fabs(x)<eps) return 0;

If(x<0)return -1;

Else return 1;

}

直线

1)一般形式:ax+by+c=0y=kx+b

2)直线的斜率k=(y2-y1)/(x2-x1);

y1=y2时,k=0x轴平行

当 x1 = x2 时,k不存在

当 x1x2无限接近时,k趋无穷大,这种情况要小心

 

3)两条直线垂直

K1*k2= - 1

 

线段

1)凸组合:

假设x1,x2,...,xn是一组对象(要根据讨论问题的背景来确定)
a1,a2,...,an是n个常数,并且满足a1+...+an=1,
那么a1x1+...+anxn就称为x1,...,xn的凸组合

设两个不同的点:p1x1y1)  p2x2y2)的凸组合是满足条件p3x3y30<=a<=1

根据凸组合:

X3=ax1+(1-a)x2,    y3=ay1+(1-a)y2;

 所以:

P3=ap1+(1-a)p2;

2) 线段:

   P1p2分别为线段的端点;

 

向量(矢量)的概念

1)定义:这个我就不多说了,大家高中就学过了,从某一点出发,有长度有方向,的就叫向量。

a*b=|a|*|b|cos<a,b>

p1p2为两点

|P1p2|=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

 

2)矢量的加减法:

   加法口诀:首尾相连,再相加

   减法口诀:同起点,指被减

 

3)投影

   矢量a上的投影“模”是 (a.b)/|a|

 

4)矢量的数量积(点乘)

   两个矢量的数量积是一个数,大小等于这两个矢量的模的乘积再乘他们的夹角余弦。

a.(点乘)b=|a||b|cos<a,b>;

ab为向量,a=x1y1)  bx2y2);

a.(点乘)b=x1*x2+y1*y2;

a垂直ba.(点乘)b=0

自乘:a.a=|a|^2;

满足 结合律,交换律,分配律;

 

 

 

5)矢量的矢量积(叉乘,叉积)

向量积,数学中又称外积、叉积,物理中称矢积、叉乘,是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量的和垂直。[1] 

 

向量积|c|=|a×b|=|a| |b|sin<a,b>


两个向量ab的叉积写作a×b(有时也被写成ab

避免和字母x混淆)。向量积可以被定义为:

|向量a×向量b|=|a||b|sinθ在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量所定义的平面上。

这个定义有一个问题,就是同时有两个单位向量都垂直于和:若满足垂直的条件,那么也满足。

一个简单的确定满足“右手定则”的结果向量的方向的方法是这样的:若坐标系是满足右手定则的,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。

向量积|c|=|a×b|=|a| |b|sin<a,b>

c的长度在数值上等于以ab,夹角为θ组成的平行四边形的面积。

c的方向垂直于a与b所决定的平面,c的指向按右手规则从a转向b来确定。

  =(  ),  =(  )。i,j,k分别是X,Y,Z轴方向的单位向量,则:

a×b=(  -  )i+ -  )j+(  -  )k,为了帮助记忆,利用三阶行列式,写成det

 

b×a= -a×b右手规则

 

p1,p2为矢量 p1x1,y1) p2(x2,y2) p1,p2,同起点

P1*(叉积)p2=x1y2-x2y1;

若结果为正数,说明p1p2的顺时针方向,

若结果为负数,说明p1p2的逆时针方向,

若结果为,则p1p2模相等且共线。

 

程序表达:设点 p0p1,p2

R=multiply(p0,p1,p2)

R>0 p0p1p0p2的顺时针方向

R=0 p0p1p0p2共线

R<0 p0p1p0p2的逆时针方向

Double multiply(point p0,point p1,point p2)

{

Return ((p1.x-p0.x)*(p2.y=p0.y)-(p2.x-p0.x)*(p1.y-p0.y));

}

实际应用的一个矢量转到另一个矢量,确定旋转的方向就用叉积

 

求法向量做法:

叉乘(Cross product)

叉乘:Vector1x1y1z1),Vector2x2y2z2):

其结果是个矢量。

方向是Vector1Vector2构成的平面法线。再使用右手定则

长度是LengthVector1*LengthVector2*sintheta

thetaVector1 & Vector2的夹角。

所以,平行的矢量叉乘结果为0矢量(长为0,方向任意)

计算结果矢量:(oxoyoz

ox=y1 * z2-y2 * z1

oy=z1 * x2-z2 * x1

oz=x1 * y2-x2 * y1

用途:计算法向量,这是生成3D图形的很关键一步。

 

 

求面积做法:

首先:两个向量的叉积不是面积,两个向量的叉积是一个向量.
两个向量的叉积的模是面积.

 

6)矢量的旋转

将矢量b逆时针旋转a角度后的矢量为

|cos a  -sin a|

|sin a  cos a |*b

 

 

 这些还都是基础

 后面相关将继续更新……

 

 

 

 

 


回复
要回复,请先登录

T^T Online Judge

[BUG反馈] [FAQ] [闽ICP备17026590号-1]
当前版本:3.24 系统时间: