空间度量算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
直线L的距离就是底P0P1的高。|vL×w|=Area(平行四边形 (vL,w))=|vL|d(P,L) d(P,L)=|vL×w|/|vL|=|uL×w| 式中,uL=vL/|vL|为直线L的单位方向矢量。 若要计算多个点到同一条直线的距离,则首先计算uL是最高效 的。
14
①. 两点定义的直线

《地理信息系统算法基础》
空间度量算法
1
本讲内容
1.直线和距离 2.角度量算 3.多边形面积的量算
2
1.直线和距离

关于两点间距离的定义,使用标准的欧几里得距离L2,它基
于毕达哥拉斯定理。对一个n维的矢量v=(v1,v2,…,vn),
它的长度|v|为
2 2 1 2 2 2 n
v v v … v v
7
1.2 直线方程

隐式或显式方程定义二维中的一条直线,三维中定义了一个 平面,在n维中,它定义了一个(n-1)维的超平面。 在任意n维的空间中,参数方程是有效的并且是最通用的。 对于一个用两点P0和P1定义的并且带有方向矢量vL的直线, 其方程有以下几种写法: P(t) = P0+ tvL = P0 + t(Pl – P0) = (1-t)P0 + tP1 式中,t为实数。在这个表达中,P(0)=P0, P(1)=P1,P(t)(0<t<1)是线段P0P1上的一点, 其中t = d[P0,P(t)]/d(P0,P1)。 因此P(1/2)=(P0+P1)/2是线段的中点。进一 步看,如果t<0,那么P(t)位于线段之外, 并且是在P0 一边;如果t >1,P(t)也位于线 段之外,但在P1—边,见图6.2。
i 1
2 cos i 1
6
1.2 直线方程

直线可以使用方程来定义,方程中的未知数是点的坐标。
二维显式方程:最先接触到的,它在计算机软件中并不是最灵活的。
隐式方程更有用些,并且很容易将显式方程转化为隐式方程。
隐式方程的前两个系数定义了一个矢量nL = (a,b),这个矢量垂 直于直线L。对于直线L上的任意两个点P0 =(x0,y0)、P1 =(x1,y1), 有nL· vL= (a, b)· (P1-P0) = a(x1-x0) + b(y1-y0) =f(P1)-f(P0) = 0。 给定一个直线L的法线矢量nL = (a,b)和L上的一个点P0,法线式 的隐式方程为 nL· (P-P0) = ax + by-nL· P0 = 0。如果a2 + b2=1则称这个 方程是规范化的,并且n是一个单位法线矢量。

计算点到射线或线段的距离与点到直线的距离的不同点是, 点P到直线L的垂线与L的交点可能位于射线或线段之外。在 这种情况下,实际的最短距离是点P到射线的起点的距离(图
6.6)或是线段的某个端点的距离(图6.7)。
22
(2).点到射线或线段的距离
对于图6.6,只有一个选择,就是计算P到射线端点的距离; 而对于一条线段, 则必须判断哪一个端点离P更近。可以分 别计算点到两个端点的距离,然后取最短的,但这不是最高 效的办法,见图6.7。而且,同时要判断点P在直线L上的基
对一个嵌入三维中的二维的情况,点P = ( x,y,0)矢量积变 为 vL w ( x1 x0 , y1 y0 ,0) ( x x0 , y y0 ,0)
(0, 0, x1 x0 x x0 y1 y0 y y0 )
距离公式则变为
d ( P, L)
( y0 y1 ) x ( x1 x0 ) y ( x0 y1 x1 y0 ) ( x1 x0 )2 ( y1 y0 )2

的无限长的直线。

直线L也可以通过一个点和方向来定义:令P0是L上的一点, vL是一个非零矢量, vL给出了直线的方向。设定 vL =(P1-P0), 或给出P0和vL ,可以选择P1=P0+ vL为直线上的第二个点。 如果vL被规范化为单位矢量, uL=vL /| vL |那么它的每个系数 就是L的各个方向角的余弦。
5
1.1 直线

在n维中,令θi(i=1,…,n)是L和第i个坐标轴ai的夹角(例如, 在二维中,a1是x轴,a2是y轴)。那么矢量vL=(vi),其中 vi=cosθi, i=1, …, n,是L的一个方向矢量。
在二维中,如图6.1所示,如
果θ是L与x轴的夹角,那么 cosθ2= sinθ,并且vi=(cosθ1, cosθ2) = (cosθ, sinθ)是L的一个 单位方向矢量。因为 cos2θ+sin2θ=1。同样,对于任 意维,各个方向余弦的平方和 为1,即 n
式中,uL为直线L的单位方向矢量。
这个公式很适于在n维空间中使用,同时在计算基点P(b)也很 有用。在三维空间中,和矢量积公式同样高效。但在二维中, 当P(b)不是必须时,隐式公式的方法更好,尤其是计算多个 点到同一条直线的距离。
21
(2).点到射线或线段的距离

射线以某个点P0为起点,沿某个方向无限延伸。它可以用参 数方程P(t)表达,其中t>0、P(0) = P0是射线的起点。一个有 限的线段由一条直线上两端点 P0、P1间的所有点组成。同样 也可以用参数方程P(t)表达,其中P(0) = P0、 P(1) = P1为两 个端点,并且点P(t)(0≤t≤1)是线段上的点。
i 1

n
2 i
对于P(p1,p2,…,pn)和Q(q1,q2,…,qn)两点间距离为
d ( P, Q ) P Q
2 ( p q ) i i i 1
n
3
1.直线和距离
1.1
直线 直线方程 点到直线的距离
1.2
1.3
4
1.1 直线

最初的直线:给出直线上的不同的两点P0和P1,定义了一条 有限的从P0到P1的线段。 延伸这条线段的任意一个端点会得到无限长的射线。 现在所理解的直线:同时延长两个端点则将得到一条概念上
特点: (1)没有计算分子的绝对值,计算出的结果是带有符号的 距离,正的表示P点在直线的一边,负的表示在直线另一边。 (2)分子的形式与直线隐式方程的形式相似。
15
②. 二维隐式方程定义的直线

直线L是很容易通过隐式方程f(x,y) =ax + by + c = 0来定义。 对于任意二维点P=(x,y),距离d(P,L)可以直接用这个
W = (P-P0), 则得到
b d ( P0 , P(b)) | w | cos w vL w vL 2 d ( P0 , P | vL | | vL | vL vL 1)
20
③.参数方程定义的直线
d(P,L)=|P-P(b)|=|w-bvL|=|w-(w· uL)uL|
三个坐标Z= 0即变为三维中。两个三维矢量的矢量积的模等
于两矢量构成的平行四边形的面积,因为|v×w|=|v||w||sinθ|, 其中θ是两个矢量v和w的夹角。
13
①. 两点定义的直线
但是,平行四边形的面积也等于底和高的乘积。令
vL=P0P1=(P1-P0)、w = P0P=(P-P0),如图6.3所示,这样点P到

式中x和y的系数就是nL中的各个组成部分。
9
1.2 直线方程

在二维中,θ是直线L与x轴的夹角,vL=(cosθ, sinθ)是单位方
向矢量,因此nL=(-sinθ,cosθ)是一个单位法线矢量。如果
P0=(x0,y0)是直线L上的某个点,那么一个规范化的L的方程
为:
-xsinθ+ ysinθ+ (x0sinθ-y0cosθ)=0
24
w1 v 0 w1 P P 1 ,0 [180,180]
w1 v v v | 0 | 90
(2).点到射线或线段的距离
d ( P, S ) d ( P, P 1)
w0 P P 0 ,0 [180,180]
w0 v 0 | 0 | 90 d ( P, S ) d ( P, P0 )
(3)对选定的点P0还有:
nL· P0P=(a,b)• (x + c /a,y ) =ax + by + c = f( x,y )=f(P)等于 (2)。
17
②. 二维隐式方程定义的直线

最后得出公式
f ( p) ax by c | nL | a 2 b2
d ( P, L)
用|nL |除f(x,y)的每个系数,使隐式方程规范化,即|nL|

(1)点到直线的垂直距离 (2)点到射线或线段的距离
11
(1)点到直线的垂直距离

①. 两点定义的直线

②. 二维隐式方程定义的直线

③. 参数方程定义的直线
12
①. 两点定义的直线
在二维和三维中,当L是通过两个点P0、P1给出的,可以 使用矢量积直接计算出点P到L的距离。若是二维的,令第
方程计算出。
矢量nL=(a,b)是直 线L的法线矢量,利用 nL即可计算任意点P到L 的距离。首先在L上任 意选一点P0,然后将矢 量P0P投影到nL,如图 6.4所示。
16
②. 二维隐式方程定义的直线
具体如下:
(1)因为a和b不同时为零,设a≠0 ,则P0=( - c/a,0)位于直线
L上;相反,如果a=0,则b≠0,则P0 = (0,-c/b),最后的结 果是相同的。 (2)对在L上的任意点P0有:nL· P0P =|nL| |P0P| cosθ = |nL| d(P,L)。
8
1.2 直线方程

三种方程表示形式中相互转换: 例如,已知二维直线上的两点P0 =(x0,y0),P1 =(x1,y1), 我们可以根据这两点生成一个隐式的方程。由于 vL = (xv, yv) = P1-P0=(x1-x0,y1-y0)是直线的方向矢量,因为nL· vL=0, 可得直线L的法线矢量nL=(-yv, xv) =(y0-y1,x1-x0)。那么, 直线 L的一个隐式方程为 (y0-y1)x+(x1-x0)y+(x0y1-x1y0)=0
可以通过计算矢量的数量积是正的、负的还是零来判断。最 终得出应该计算点P到P0还是到P1的距离,或者是P到直线L的垂 直距离。这些技术可以用到n维空间中。两个夹角的测试,可以 只用两个数量积运算,即w0· v和v· v,同时w0· v和v· v是求P点在直 线L上的基点的P(b)的参数b的分子和分母,这样可以依次测试和 计算。
19
③.参数方程定义的直线

在n维空间中,已知直线L的参数方程为P(t)=P0+t(P1-P0),P 为任意n维空间中的任意一点。为了计算点 P到直线L的距离 d(P,L),从点P作直线L的垂线,交于点P(b)。
则向量P0P(b)是矢量P0P在线段P0P1上
的投影,如图6.5所示。设vL=(P1-P0)和
点,是否在线段外。
23
(2).点到射线或线段的距离
简便的方法:先判断与哪个端点的距离近,然后计算。 具体方法:考虑P0P1、P0P的夹角,P1P、P0P1的夹角,如果其 如果不是直角,P的基点必然落在端点的一边或另一边,要看
中有个角为90°,则对应的线段的端点就是P在L上的基点P(b)。
角是锐角还是钝角,如图6.8和图6.9所示。

因为sin2θ+cos2θ=1。再进一步,参数方程为 P(t)=(x0 + tcosθ,y0 + tsinθ)
10
1.离指的是直线L和任意一个点P的最短距离
d(P,L) 。

基点:过点作直线的垂线,垂线和直线的交点称为基点。 如果L是一个有限的线段,那么P在L上的基点可能在线段之 外,这就需要一个不同的计算最短距离的方法。
= 1。这样则得出非常高效的公式d(P,L)=f(p)=ax+by+c,当 a2+b2=1。对每个距离计算,这个公式只用了2次乘法运算和 2次加法运算。
18
②. 二维隐式方程定义的直线
在二维中,若需要计算多个点到同一条直线L的距离,那
么先得到规格化的隐式方程,然后使用这个公式。
只是比较距离(寻找离直线最近或最远的点),不需要规范 化。因为它只是通过乘以一个常数因子来改变距离的值。 当θ为L与x轴的夹角并且P0 =(x0,y0)是L上的点,那么规范 化后的隐式方程有:a=-sinθ,b=cosθ,和c=x0sinθ-y0cosθ。
相关文档
最新文档