基础-几何

基础-几何

1.1.矢量

1.1.1.定义

以三维空间为例,定义三维空间坐标系x,y,z对应三个单位矢量ijk

在这里插入图片描述

上述ijk另一个数值表示形式为(1,0,0),(0,1,0),(0,0,1)。

1.1.2.运算

矢量立足于其数值表现形式支持一下运算:

1.矢量相加

2.矢量相减

3.矢量乘以数值

4.矢量的点积

设矢量a(x1,y1,z1),矢量b(x2,y2,z2),ang为ab间的夹角。

则:a****b=|a||b|cos(ang) = x1x2+y1y2+z1z2;

其中ang采用弧度单位。其取值范围为[0, PI]。矢量方向相同时角度为0,方向相反时角度为PI,垂直时角度为PI/2。值得注意的是点积的结果是数值。

5.矢量的叉积

设矢量a(x1,y1,z1),矢量b(x2,y2,z2),ang为ab间的夹角。

首先矢量ab的叉积结果是一个矢量。该矢量可表示为c(y1z2-z1y2, z1x2-x1z2, x1y2-y1x2)。

然后,c的模符合:|c|=|a||b|sin(ang)。

其中ang采用弧度单位。其取值范围为[0, PI]。矢量方向相同时角度为0,方向相反时角度为PI,垂直时角度为PI/2。

值得注意的是叉积的结果是矢量。且矢量的方向可通过右手定则确定。在ab夹角不为0的情况下,其叉积必然垂直于ab所在的平面。也必然分别垂直于ab

1.2.平面,曲线,曲面基础表达式

1.2.1.空间平面方程

三维空间平面方程形式为:ax + by + cz + d = 0

给定上述形式的平面方程,n(a,b,c)必然是平面的方向矢量。

平面的法向矢量垂直于平面内任何一条直线。

给定平面内不共线p0,p1,p2三个点可以唯一确定平面方程:

1.求取矢量p0p1,p1p2的叉积。用叉积的x,y,z作为a,b,c。

2.带入p0(x0, y0, z0),易于得到d。

1.2.2.曲线与曲面表示方式

1.2.2.1.显示表示

通用形式为:
y = f ( x ) ; y = f(x); y=f(x);
以直线为例:y = kx+b。此表达的缺陷是对形如x = 1这样平行y轴直线无法表示。

1.2.2.2.隐式表示

1.对二维曲线

通用形式为:
F ( x , y ) = 0 ; F(x, y) = 0; F(x,y)=0;
对直线,其隐式表示为:
a x + b y + c = 0 ; ax + by + c = 0; ax+by+c=0;
对圆锥曲线,其隐式表示为:
x x + y y + 2 x y + d x + e y + f = 0 ; xx+yy+2xy+dx+ey+f=0; xx+yy+2xy+dx+ey+f=0;
2.对三维曲面

通用形式为:
F ( x , y , z ) = 0 ; F(x,y,z) = 0; F(x,y,z)=0;
对平面:
a x + b y + c z + d = 0 ; ax+by+cz+d=0; ax+by+cz+d=0;
对圆心位于原点,半径为r的球面:
x x + y y + z z − r r = 0 ; xx+yy+zz-rr = 0; xx+yy+zzrr=0;
隐式表示更通用(相对于显式表示下单一方程无法描述某些场景而言),但难以求解曲线,曲面上的点。

1.2.2.3.参数表示

1.对曲线

二维曲线通用形式为:
x = f 1 ( t ) ; y = f 2 ( t ) ; 0 < = t < = 1 ; x = f1(t); y = f2(t);0<=t<=1; x=f1(t);y=f2(t);0<=t<=1;
三维曲线通用形式为:
x = f 1 ( t ) ; y = f 2 ( t ) ; z = f 3 ( t ) ; 0 < = t < = 1 ; x=f1(t);y=f2(t);z=f3(t);0<=t<=1; x=f1(t);y=f2(t);z=f3(t);0<=t<=1;
以启点p0(x0, y0, z0),终点p1(x1, y1, z1)的直线的参数表示为例:
x = ( 1 − t ) x 0 + t x 1 ; y = ( 1 − t ) y 0 + t y 1 ; z = ( 1 − t ) z 0 + t z 1 ; 0 < = t < = 1 ; x=(1-t)x0+tx1;y=(1-t)y0+ty1;z=(1-t)z0+tz1;0<=t<=1; x=(1t)x0+tx1;y=(1t)y0+ty1;z=(1t)z0+tz1;0<=t<=1;
在曲线的参数表示下,给定曲线上任意一点p(x, y, z),将其看成矢量p。这时可以为曲线规定方向。曲线方向对应于曲线上参数增加的方向。

给定曲线参数方程,对其x,y,z的每个维度分别对t求导,
x ′ = f 1 ′ ( t ) ; y ′ = f 2 ′ ( t ) ; z ′ = f 3 ′ ( t ) ; 0 < = t < = 1 ; x'=f1'(t);y'=f2'(t);z'=f3'(t);0<=t<=1; x=f1(t);y=f2(t);z=f3(t);0<=t<=1;
给定t值,p’(x’, y’, z’)可认为曲线在t值时候的切线方向矢量。

在曲线的参数表示形式下有个值得关注的特例:曲线的基表示形式。

三维曲线基表示形式为:
x = a 0 , 0 f 0 , 0 ( t ) + a 0 , 1 f 0 , 1 ( t ) + . . . + a 0 , n f 0 , n ( t ) ; x=a_{0,0}f_{0,0}(t)+a_{0,1}f_{0,1}(t)+...+a_{0,n}f_{0,n}(t); x=a0,0f0,0(t)+a0,1f0,1(t)+...+a0,nf0,n(t);

y = a 1 , 0 f 1 , 0 ( t ) + a 1 , 1 f 1 , 1 ( t ) + . . . + a 1 , n f 1 , n ( t ) ; y=a_{1,0}f_{1,0}(t)+a_{1,1}f_{1,1}(t)+...+a_{1,n}f_{1,n}(t); y=a1,0f1,0(t)+a1,1f1,1(t)+...+a1,nf1,n(t);

z = a 2 , 0 f 2 , 0 ( t ) + a 2 , 1 f 2 , 1 ( t ) + . . . + a 2 , n f 2 , n ( t ) ; z=a_{2,0}f_{2,0}(t)+a_{2,1}f_{2,1}(t)+...+a_{2,n}f_{2,n}(t); z=a2,0f2,0(t)+a2,1f2,1(t)+...+a2,nf2,n(t);

其中每个f_{i, j}(t)均为一个独立的关于t的函数。a_{i,j}为系数。

2.对曲面

曲面的参数表示

三维曲面通用表示形式为:
x = f 1 ( u , v ) ; y = f 2 ( u , v ) ; z = f 3 ( u , v ) ; x=f1(u,v); y=f2(u,v); z=f3(u,v); x=f1(u,v);y=f2(u,v);z=f3(u,v);
即每个分量均通过一个由u,v构成的独立函数来决定。

通过确定u,v数值,可以唯一确定三维曲面上一个点。

分别对每个分量上方程对u求取导数,可以获得给定u值下,曲面上点的切线方向矢量。

分别对每个分量上方程对v求取导数,可以获得给定v值下,曲面上点的切线方向矢量。

在上述两个方向矢量不平行或反向下,求取两个矢量的叉积,即可得到曲面上(u,v)所确定点上的法线方向矢量。

在曲面的参数表示形式下有个值得关注的特例:曲面的基表示形式。
p ( u , v ) = ∑ i = 0 m ∑ j = 0 n f 1 i ( u ) f 2 j ( v ) a i , j p(u, v) = \sum_{i=0}^{m} \sum_{j=0}^{n} f1_{i}(u) f2_{j}(v) a_{i,j} p(u,v)=i=0mj=0nf1i(u)f2j(v)ai,j
值得注意的是:上述p(u, v)是矢量形式,即其由三个分量(x, y, z)组成。f1_{i}(u),f2_{j}(v)分别是关于u与v的独立函数,也是矢量形式,即由三个分量组成。每个分量均是一个独立的关于因变量的函数。a_{i}{j}是系数,也是矢量形式,即由三个分量组成。

后续的贝塞尔曲面,样条曲面,Nurbs曲面均会采用此形式,到时再具体分析。

1.3.连续性

1.3.1.参数连续性

零阶连续性:相邻两段曲线在邻接点处坐标一致。

一阶连续性:相邻两段曲线在邻接点处一阶导数相同。此时坐标也必然一致。

二阶连续性:相邻两段曲线在邻接点处二阶导数相同。此时一阶导数也必然 。

1.3.2.几何连续性

零阶连续性:相邻两段曲线在邻接点处坐标一致。

一阶连续性:相邻两段曲线在邻接点处一阶导数成比例。

二阶连续性:相邻两段曲线在邻接点处一阶导数,二阶导数均成比例。

成比例的意思以三维曲线参数表示为例,某点处一阶导数,针对x,y,z分量分别有一个值。假设曲线1在邻接点一阶导数为p1’(x1’, y1’, z1’),假设曲线2在邻接点一阶导数为p2’(x2’, y2’, z2’),有:
x 1 ′ = a ∗ x 2 ′ ; y 1 ′ = a ∗ y 2 ′ ; z 1 ′ = a ∗ z 2 ′ ; x1' = a*x2';y1' = a*y2';z1' = a*z2'; x1=ax2;y1=ay2;z1=az2;
上述a为系数。

1.4.曲线的自然参数方程

应用弧长积分公式,可计算该曲线上任意点p(x, y, z)到p0之间的弧长。这样曲线上点p的位置与该点处的弧长s是一一对应的。以弧长s作为曲线方程参数。
x = f 1 ( s ) ; y = f 2 ( s ) ; z = f 3 ( s ) ; x=f1(s);y=f2(s);z=f3(s); x=f1(s);y=f2(s);z=f3(s);
值得注意的是可以证明:
∣ p ′ ( s ) ∣ = s q r t ( f 1 ′ ( s ) 2 + f 2 ′ ( s ) 2 + f 3 ′ ( s ) 2 ) = 1 。 |p'(s)|=sqrt(f1'(s)^2+f2'(s)^2+f3'(s)^2)=1。 p(s)=sqrt(f1(s)2+f2(s)2+f3(s)2)=1
求取弧长:
L = ∫ a b ( x ′ ( t ) ) 2 + ( y ′ ( t ) ) 2 + ( z ′ ( t ) ) 2 d t L = \int_{a}^{b} \sqrt{(x'(t))^2 + (y'(t))^2 + (z'(t))^2} dt L=ab(x(t))2+(y(t))2+(z(t))2 dt
其中a,b是参数t的变化区间。

推导过程为:
d x = d x d t d t = x ′ ( t ) d t dx = \frac{dx}{dt} dt = x'(t) dt dx=dtdxdt=x(t)dt

d y = d y d t d t = y ′ ( t ) d t dy = \frac{dy}{dt} dt = y'(t) dt dy=dtdydt=y(t)dt

d z = d z d t d t = z ′ ( t ) d t dz = \frac{dz}{dt} dt = z'(t) dt dz=dtdzdt=z(t)dt

d s = s q r t ( d x 2 + d y 2 + d z 2 ) = ( x ′ ( t ) ) 2 + ( y ′ ( t ) ) 2 + ( z ′ ( t ) ) 2 d t ds = sqrt(dx^2+dy^2+dz^2)=\sqrt{(x'(t))^2 + (y'(t))^2 + (z'(t))^2} dt ds=sqrt(dx2+dy2+dz2)=(x(t))2+(y(t))2+(z(t))2 dt

1.5.活动标架

对曲线的自然参数方程:
x = f 1 ( s ) ; y = f 2 ( s ) ; z = f 3 ( s ) ; x=f1(s);y=f2(s);z=f3(s); x=f1(s);y=f2(s);z=f3(s);
取坐标系原点和曲线p上的动点P重合,使得整个坐标系随P点的运动而运动,这种坐标系称为活动坐标系。

1.第一个坐标轴

零矢量axis1(f1’(s), f2’(s), f3’(s))为第一个坐标轴的方向,前面已经说明axis1是单位矢量。

2.第二个坐标轴

由于
f 1 ′ ( s ) 2 + f 2 ′ ( s ) 2 + f 3 ′ ( s ) 2 = 1 ; f1'(s)^2+f2'(s)^2+f3'(s)^2=1; f1(s)2+f2(s)2+f3(s)2=1;
上式两边对s求取导数:
2 f 1 ′ ( s ) f 1 ′ ′ ( s ) + 2 f 2 ′ ( s ) f 2 ′ ′ ( s ) + 2 f 3 ′ ( s ) f 3 ′ ′ ( s ) = 0 ; 2f1'(s)f1''(s)+2f2'(s)f2''(s)+2f3'(s)f3''(s)=0; 2f1(s)f1′′(s)+2f2(s)f2′′(s)+2f3(s)f3′′(s)=0;
看成矢量点积的形式,可得:
( f 1 ′ ( s ) , f 2 ′ ( s ) , f 3 ′ ( s ) ) ∗ ( f 1 ′ ′ ( s ) , f 2 ′ ′ ( s ) , f 3 ′ ′ ( s ) ) = 0 ; (f1'(s),f2'(s),f3'(s))*(f1''(s),f2''(s),f3''(s))=0; (f1(s),f2(s),f3(s))(f1′′(s),f2′′(s),f3′′(s))=0;
所以,可知矢量(f1’‘(s),f2’‘(s),f3’'(s))和axis1垂直,令其为第二个坐标轴。由于其不是单位矢量。假设此方向上单位矢量为axis2axis2也称为主法线矢量,其总是指向曲线凹入的方向。有:
( f 1 ′ ′ ( s ) , f 2 ′ ′ ( s ) , f 3 ′ ′ ( s ) ) = k ( s ) ∗ a x i s 2 ; (f1''(s),f2''(s),f3''(s))=k(s)*axis2; (f1′′(s),f2′′(s),f3′′(s))=k(s)axis2;
其中k(s)是一个和s取值有关的系数。称其为曲线在s处的曲率。称为1/k(s)为曲率半径。曲率半径反映的是曲线在此点处的弯曲程度。

3.第三个坐标轴

axis1叉积axis2得到一个垂直于两者的矢量,且此矢量必然是单位矢量,记为axis3

axis3方向为第三个坐标轴方向。也称其为单位副法线矢量。

这样便构成一个活动坐标系。

通过点P,由axis1axis2构成的平面称为密切平面。

通过点P,由axis1axis3构成的平面称为从切平面。

通过点P,由axis2axis3构成的平面称为法平面。

补充知识:三维曲线挠率。

从上述可知axis3矢量的每个分量也是关于s的方程。记axis3为(t1(s), t2(s), t3(s)),则(t1’(s), t2’(s), t3’(s))反映s处密切平面法向变化率。

已知:
( t 1 ′ ( s ) , t 2 ′ ( s ) , t 3 ′ ( s ) ) = − a ∗ a x i s 2 ; (t1'(s), t2'(s), t3'(s))= -a*axis2; (t1(s),t2(s),t3(s))=aaxis2;
其中a为系数。称其为挠率。

1.6.型值点,插值,逼近,控制点

1.型值点

通过测量得到的一组描述曲线或曲面几何形状的数据点。

2.插值

基于型值点得到其他点的值。

3.逼近

型值点太多时,构造曲线使其通过所有型值点变得困难,此时构造一个曲线方程在某种意义下最佳逼近这些型值点。

插值与逼近统称为拟合。

4.控制点

用来控制或调整曲线曲面形状的控制多边形的顶点。

1.7.三维变换与投影

1.7.1.坐标系

1.世界坐标系

右手坐标系:

右手握拳从x到y,大拇指方向为z轴。

左手坐标系:

左手握拳从x到y,大拇指方向为z轴。

2.建模坐标系

对物体建模使用的坐标系,也叫局部坐标系。

3.观察坐标系

观察坐标系:以眼睛/相机作为原点,视线方向作为z方向,采用左手坐标系。

4.屏幕坐标系

三维显示上三维空间物体最终在视线方向到物体中间的某个平面(屏幕)上显示。显示的是三维物体在此平面的投影。对屏幕坐标系,原点一般位于窗口客户区中心,x轴水平向右,y轴垂直向上。

5.设备坐标系

显示设备自身持有一个坐标系。原点位于平面左上角,x轴水平向右,y轴垂直向下,基本单位为像素。

1.7.2.三维几何变换

对物体的变换,最后都是通过对三维点的变换来切入的。通过齐次矩阵来作为实现点变换的工具。

1.平移变换

希望对P(x,y,z)执行三个轴为(tx,ty,tz)的平移变换。令平移后的点为P’(x’, y’, z’)。
x ′ = x + t x ; y ′ = y + t y ; z ′ = z + t z ; x'=x+tx;y'=y+ty;z'=z+tz; x=x+tx;y=y+ty;z=z+tz;
用齐次矩阵进行等价表示为:
[ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ x y z 1 ] = [ x + t x y + t y z + t z 1   ] \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1\\ \end{bmatrix} = \begin{bmatrix} x + t_x \\ y + t_y \\ z + t_z \\ 1\ \end{bmatrix} 100001000010txtytz1 xyz1 = x+txy+tyz+tz1 
上述齐次矩阵即为三维平移变换矩阵。

2.旋转变换

旋转变换首先得有旋转轴。右手大拇指指向旋转轴正向,四指的转向为转角正方向。

2.1.饶x轴旋转

希望对P(x,y,z)执行绕x轴的旋转变换。令旋转ang角度后的点为P’(x’, y’, z’)。

我们分析绕轴旋转:

a.确定投影点

轴是三维直线。首先求取三维点到此三维直线投影点。

投影点位于直线上,点和投影构成的矢量和直线垂直。

以绕x轴为例,设P(x0,y0,z0),则投影点为:P0(x0, 0, 0)。

b.确定投影半径

投影半径为点和投影点距离。

以绕x轴为例,设P(x0,y0,z0),则投影半径为:
∣ P P 0 ∣ = s q r t ( y 0 2 + z 0 2 ) ; |PP0|=sqrt(y0^2+z0^2); PP0∣=sqrt(y02+z02);
c.确定旋转结果

三维点绕轴旋转形成的是三维圆形曲线。

以绕x轴为例,设P(x0, y0, z0)。

旋转形成的曲线构成的圆形曲线为以投影点为圆心,以投影半径为半径,落在以x轴为法线平面上。此曲线方程为:
x = x 0 ; ( y − y 0 ) 2 + ( z − z 0 ) 2 = s q r t ( y 0 2 + z 0 2 ) ; x = x0; (y-y0)^2+(z-z0)^2=sqrt(y0^2+z0^2); x=x0;(yy0)2+(zz0)2=sqrt(y02+z02);
将上述方程以旋转角度为参数的参数方程形式给出,结果为:
x = x 0 ; y = y 0 c o s ( a n g ) − z 0 s i n ( a n g ) ; z = y 0 s i n ( a n g ) + z 0 c o s ( a n g ) ; x=x0;\\ y=y0cos(ang)-z0sin(ang);\\ z=y0sin(ang)+z0cos(ang);\\ x=x0;y=y0cos(ang)z0sin(ang);z=y0sin(ang)+z0cos(ang);
用齐次矩阵进行等价表示为:
[ 1 0 0 0 0 c o s ( a n g ) − s i n ( a n g ) 0 0 s i n ( a n g ) c o s ( a n g ) 0 0 0 0 1 ] [ x y z 1 ] = [ x y c o s ( a n g ) − z s i n ( a n g ) y s i n ( a n g ) + z c o s ( a n g ) 1   ] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos(ang) & -sin(ang) & 0 \\ 0 & sin(ang) & cos(ang) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1\\ \end{bmatrix} = \begin{bmatrix} x \\ ycos(ang)-zsin(ang) \\ ysin(ang)+zcos(ang) \\ 1\ \end{bmatrix} 10000cos(ang)sin(ang)00sin(ang)cos(ang)00001 xyz1 = xycos(ang)zsin(ang)ysin(ang)+zcos(ang)1 
2.2.类似的可以得到绕y轴旋转的齐次矩阵表示形式
[ c o s ( a n g ) 0 s i n ( a n g ) 0 0 1 0 0 − s i n ( a n g ) 0 c o s ( a n g ) 0 0 0 0 1 ] [ x y z 1 ] = [ z s i n ( a n g ) + x c o s ( a n g ) y z c o s ( a n g ) − x s i n ( a n g ) 1   ] \begin{bmatrix} cos(ang) & 0 & sin(ang) & 0 \\ 0 & 1 & 0 & 0 \\ -sin(ang) & 0 & cos(ang) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1\\ \end{bmatrix} = \begin{bmatrix} zsin(ang)+xcos(ang) \\ y \\ zcos(ang)-xsin(ang) \\ 1\ \end{bmatrix} cos(ang)0sin(ang)00100sin(ang)0cos(ang)00001 xyz1 = zsin(ang)+xcos(ang)yzcos(ang)xsin(ang)1 
2.3.用类似方法可得绕z轴旋转的齐次矩阵表示形式
[ c o s ( a n g ) − s i n ( a n g ) 0 0 s i n ( a n g ) c o s ( a n g ) 0 0 0 0 1 0 0 0 0 1 ] [ x y z 1 ] = [ x c o s ( a n g ) − y s i n ( a n g ) x s i n ( a n g ) + y c o s ( a n g ) z 1   ] \begin{bmatrix} cos(ang) & -sin(ang) & 0 & 0 \\ sin(ang) & cos(ang) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1\\ \end{bmatrix} = \begin{bmatrix} xcos(ang)-ysin(ang) \\ xsin(ang)+ycos(ang) \\ z \\ 1\ \end{bmatrix} cos(ang)sin(ang)00sin(ang)cos(ang)0000100001 xyz1 = xcos(ang)ysin(ang)xsin(ang)+ycos(ang)z1 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值