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=0或y=kx+b 2)直线的斜率k=(y2-y1)/(x2-x1); 当y1=y2时,k=0与x轴平行 当 x1 = x2 时,k不存在 当 x1,x2无限接近时,k趋无穷大,这种情况要小心
3)两条直线垂直 K1*k2= - 1;
线段 1)凸组合: 假设x1,x2,...,xn是一组对象(要根据讨论问题的背景来确定) 设两个不同的点:p1(x1,y1) p2(x2,y2)的凸组合是满足条件p3(x3,y3)0<=a<=1 根据凸组合: X3=ax1+(1-a)x2, y3=ay1+(1-a)y2; 所以: P3=ap1+(1-a)p2; 2) 线段: P1,p2分别为线段的端点;
向量(矢量)的概念 1)定义:这个我就不多说了,大家高中就学过了,从某一点出发,有长度有方向,的就叫向量。 a*b=|a|*|b|cos<a,b> 设p1,p2为两点 |P1p2|=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
2)矢量的加减法: 加法口诀:首尾相连,再相加 减法口诀:同起点,指被减
3)投影 矢量b 在a上的投影“模”是 (a.b)/|a|
4)矢量的数量积(点乘) 两个矢量的数量积是一个数,大小等于这两个矢量的模的乘积再乘他们的夹角余弦。 a.(点乘)b=|a||b|cos<a,b>; 设a,b为向量,a=(x1,y1) b(x2,y2); a.(点乘)b=x1*x2+y1*y2; 当a垂直b,a.(点乘)b=0 自乘:a.a=|a|^2; 满足 结合律,交换律,分配律;
5)矢量的矢量积(叉乘,叉积) 向量积,数学中又称外积、叉积,物理中称矢积、叉乘,是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量的和垂直。[1]
向量积|c|=|a×b|=|a| |b|sin<a,b> 两个向量a和b的叉积写作a×b(有时也被写成a∧b, 避免和字母x混淆)。向量积可以被定义为: |向量a×向量b|=|a||b|sinθ在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量所定义的平面上。 这个定义有一个问题,就是同时有两个单位向量都垂直于和:若满足垂直的条件,那么也满足。 一个简单的确定满足“右手定则”的结果向量的方向的方法是这样的:若坐标系是满足右手定则的,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。 向量积|c|=|a×b|=|a| |b|sin<a,b> 即c的长度在数值上等于以a,b,夹角为θ组成的平行四边形的面积。 c的方向垂直于a与b所决定的平面,c的指向按右手规则从a转向b来确定。 设 =( ), =( )。i,j,k分别是X,Y,Z轴方向的单位向量,则: a×b=( - )i+( - )j+( - )k,为了帮助记忆,利用三阶行列式,写成det
b×a= -a×b右手规则
设p1,p2为矢量 p1(x1,y1) p2(x2,y2) 若p1,p2,同起点 P1*(叉积)p2=x1y2-x2y1; 若结果为正数,说明p1在p2的顺时针方向, 若结果为负数,说明p1在p2的逆时针方向, 若结果为0 ,则p1,p2模相等且共线。
程序表达:设点 p0,p1,p2 R=multiply(p0,p1,p2) R>0 则p0p1在p0p2的顺时针方向 R=0 则p0p1与p0p2共线 R<0 则p0p1在p0p2的逆时针方向 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)叉乘:Vector1(x1,y1,z1),Vector2(x2,y2,z2): 其结果是个矢量。 方向是Vector1,Vector2构成的平面法线。再使用右手定则 长度是Length(Vector1)*Length(Vector2)*sin(theta) theta是Vector1 & Vector2的夹角。 所以,平行的矢量叉乘结果为0矢量(长为0,方向任意) 计算结果矢量:(ox,oy,oz) 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
这些还都是基础 后面相关将继续更新……
|