LISP用户输入函数


LISP用户输入函数

--------------------------------------------------------------------------------

109. entsel
一. 功能

提示用通过指定一个点选择单个对象(图元)。

二. 格式

(entsel [prompt])

三. 说明

entsel函数返回一个表﹐表中的第一个元素是用户所选对象的图元名﹐第二个元素是用户选择对象时指定的拾取点的坐标值(以现行UCS为单位)。如果调用entsel函数时指定了可选变元prompt(一个字符串)﹐则将该字符串作为请求用户作对象选择的提示信息;如果没有提供变元prompt﹐则该函数会给出隐含的提示串: "Select object:"

由entsel函数所返回的这个表﹐可以提供给AutoCAD﹐作为任何一种对象选择提示的响应。AutoCAD会把它作为拾取点看待﹐以此去选择对象。

下面的AutoCAD命令序列示范了entsel函数的使用﹐以及该函数的返回值:

Command:LINE
From point:1,1
To point:6,6
To point
Command: (setq e (entsel "Please choose an object:")
Please choose an object: 3,3
((3,0 3,0 0, 0))

有时候当操作一个对象时﹐需要在选中一个对象的同时﹐还需要选中指定的点。这种例子可以在Objict Snap(对象捕捉)以及捕BREAK、TRIM和EXTEND等命令中找到﹐entsel函数的提供使得AutoLISP程序可以完成这种操作。Entsel函数需要用点选取的方式选择单个对象。除非在函数中作特别声明﹐否则entsel和将现行Osnap设置被忽略。Entsel函数承认在它前面通过调用initget函数而设置的关键字。

四. 实例

设计一个程序﹐该程序可计算由多义线或圆圈起来的区域面积﹐并可从所选域的面积中自动减去所包含的孔洞或开口的面积。

(defun C:APLATE (/ plate ssl count emax)
(while (not (setq plate (entsel "\n Pick the plate outline:"))))
; ; ; 选区域外框线
(prompt "\n Select all holes and cutouts …") ; ; ; 选孔洞
(setq ssl (ssget)) ; ; ; 获得孔洞选择集
(ssdel (car plate)ss1) ; ; ; 从ss1中排除plate
(command "_.Area"
"_a"
"_e"
plate
""
"_s"
"_e"
)
(setq count 0 ; ; ; ss1中对象个数
emax (sslength ss1)
)
(while (< count emax) ; ; ; 开始循环
(command (ssname ss1 count)) ; ; ; 将ename传递到
(setq count (it count )) ; ; ; command命令
) ; ; ;
(command " " " ")
(prompt (strcat "\n Final area is" (rtos (getvar "AREA") 2) "SQ")
(princ) ; ; ;
) ; ; ; end defun


128. getangle

一. 功能

执行本函数时会暂停﹐让用户输入一个角度﹐将该角度转换成弧度后返回。

二. 格式


(getangle [pt] [prompt])

三. 说明

变元pt是以现行UCS表示的一个2D基点﹐而变元prompt是要作为提示信息显示的一个字符串﹐如果指定了变元pt﹐那么就假定它是两点中的第一点﹐这样﹐用户再指定另一个点就能为AutoLISP指定一个角度。您还可以提供一个3D基点﹐但角度的度量都是在现行构造平面中进行的。

Getangle函数测量零弧度方向(零弧度方向是由ANGBASE系统变量设定第0与函数和用户指定的两点确定的直线之间的角度值﹐测量方向是逆时针方向。所返回的角度是相对于现行构造平面(在现行标高处的现行UCS的XY平面上)来测量的﹐并以弧度作为角度的单位。

通过录入一个以AutoCAD的现行角度单位格式表示的一个数﹐用户也可以指定一个角度。虽然现行角度单位格式可能是度、梯度或其它什么单位﹐但这个函数总是以弧度为单位返回角度值。通过在图形屏幕上指定两个2D的位置﹐用户也能为AutoLISP给出一个角度。AutoCAD从第一点到现行十字光标上画出一条橡皮线﹐以帮助用户确定角度。

理解输入的角度与getangle函数所返回的角度之间的区别﹐是非常重要的。传送给getangle函数的角度﹐是基于AutoCAD的系统变量ANGDIR和ANGBASE的现行设置而确定的。然而﹐一但输入了一个角度﹐则它就以ANGBASE的现行设置为0弧度按逆时针方向来测量(忽略ANGDIR的设置)。

用户不能录入另一个AutoLISP表达式响应getangle函数的请求。

四. 实例

(setq ang (getangle))
(setq ang (getangle ?1.0 3.5))
(setq ang (getangle "which way?"))
(setq ang (getangle '(1.0 3.5) "which way?"))

130. getcorner

一. 功能

暂停下来﹐让用户指定一个矩形的第二个角。

二. 格式

(getcorner pt [prompt])

三. 说明

getcorner函数要求有一个基于现行UCS的一个基点变元﹐当用户在屏幕上移动十字光标时﹐它会从这个基点开始画出一个矩形。Prompt是要作为提示信息显示的一个字符串。Getcorner函数返回以现行UCS表示的一个点。这与getpoint函数类似。如果用户提供地点是一个3D点﹐则其Z坐标会被忽略。现行标高用作Z坐标。

用户不能录入另一个AutoLISP表达式来响应getcorner函数的请求。

四. 实例

(setq pt (getcorner '(3.0 7.0) "\n please enter second point:"))

131. getdist

一. 功能

暂停下来﹐让用户输入一个距离值。

二. 格式

(getdist [pt] [prompt])

三. 说明

pt变元是以现行UCS表示的一个2D或3D基点。如果在该函数调用中提供了pt﹐那么﹐它就作为两点中的第一点﹐这时﹐仅提示用户再录入第二个点。Prompt变元是作为提示信息显示的一个字符串。

在基点pt没有提供的情况下

﹐用户需要选择两个点才能指定一个距离;如果提供了基点﹐则仅需要在选择一个点(即第二点)。通过录入一个以AutoCAD的现行距离格式表示的一个数﹐用户也能指定一个距离。虽然现行距离单位格式可能是以英寸(建筑单位制)表示的﹐但getdist函数总是以实型数返回这个距离值。

Getdist函数从第一点到现行十字光标位置点画一条橡皮线﹐以帮助用户确定这段距离值。

如果所提供的3D点﹐那么返回的值就是一个3D距离。然而﹐如果在调用getdist函数之前﹐提前调用initget函数﹐并将Iniget函数的标志位设置为64﹐那么﹐它就会通知getdist函数﹐要它忽略3D点的Z坐标﹐而返回一个2D距离。

用户不能录入另一个AutoLISP表达式去响应getdist函数的请求。

四. 实例

例1. (setq dist (getdist))
(setq dist (getdist '(1.0 3.5)))
(setq dist (getdist "how far"))
(setq dist (getdist '(1.0 3.5) "how far?"))

例2. (setq dist (getdist "\n How far?")) ; ; ;
Har far? 168 ; ; ; 返回168.0000000

例3. (iniget 16) ; ; ;
(setq dist (getdist '(2 3))) ; ; ;
5, 6, 3 ; ; ; 录入值
5, 196 150 ; ; ; 返回3D距离


133. getfiled

一. 功能

用标准的AutoCAD文件对话框界面﹐提示用户录入一个文件名﹐并返回这个被录入的文件名。

二. 格式

(getfiled title default ext flages)

三. 说明

title变元是一个字符串﹐用以指定对话框标题;default指定要使用的一个隐含文近名(它也可以是一个空字符串("");ext是隐含的文件的扩展名。如果ext变元传递的是一个空字符串("")﹐它隐含指出文件的扩展名是* (即所有类型的文件)。如果文件类型dwg包含在ext变元中﹐则getfiled函数就会在对话框中显示出一个图形预览框。Flags变元是一个整型值(一个位编码预)﹐它控制对话框的行为。为了一次设置一个以上的条件﹐可以将1,2,4,8这几位值加在一起﹐生成一个大于0而小于15的一个标志值。

Flags的值可由如下几个值按位编码组合而成:

(1)标志值为1的情况(即第0位为1)

当希望提您录入一个要新生成的文件名时﹐将此值置1。当希望提示您录入的文件名是一个已有的文件时(即要打开一个已有文件)﹐就不要设置这个标志位。在后一种情况下﹐如果您录入一个并不存在的文件的文件名﹐对话框就会在对话框底部显示出一条出错信息。

如果设置了此标志位﹐而用户又选择了已经存在的一个文件﹐AutoCAD就会显示出一个报警框﹐并为您提供了是继续进行下去环是中断本操作的选择。

(2)标志值为2的情况(即第1位置为1)

如果设置此位﹐则禁用 "Type it"

按钮(即让它变灰)。当另一个对话框激活时,如果调用getfiled函数,这个标志位就要置1,(否则,它将强制另一个对话框消失)。

如果不设置标志位,"Type it"按钮是可用的。如果用户选择了这个按钮,对话框将会消失,且getfiled函数返回1。

(3)标志值位4的情况(即第2位置为1)

让用户录入一个任意的文件名的扩展名,或者干脆不录入扩展名。
如果不设置这个标志位﹐则getfiled函数仅接受在ext变元中指定的扩展名的那种类型的文件﹐并且用户在File文本框中没有录入由ext指定的扩展名的话﹐则该函数会将这个扩展名附于文件名之后。

(4)标志位为8的情况(即第3位置为1)

如果这个标志位被设置且第0位没有被设置﹐getfiled函数就会为用户录入的文件名执行一次库搜索。如果它找到了该文件﹐且该文件的目录在库搜索路径中﹐它就会经路径截除﹐仅返回文件名(如果它在不同的一个目录中找到了同名的这样一个文件﹐它就不会截除路径部分)。

如果不设置这个标志位﹐getfiled函数就会返回整个文件名﹐包括路径名。

如果您要使用对话框来打开一个现有文件﹐而又想将该文件名保存在图形中(或其它的数据库中)﹐而且希望在以后还能通过getfiled函数去搜索它﹐就应该将此位加以设置。

如果对话框从用户那里获得了一个文件名﹐getfiled函数就将指定的文件名以字符串的形式返回;否则﹐它返回nil。

134. getint

1. 功能

暂停程序的执行,让用户输入一个整型数,然后将这个整型数返回。

二. 格式

(getint [prompt])

三. 说明

变元prompt是一个任选的作为提示信息被显示的一个字符串,getint函数返回一个整型数或nil。
传给getint函数的数范围是-32768到+32767。用户不能录入另一个AutoLISP表达式去响应getint函数的请求。

四. 实例

(setq num (getint)) ; ; ; 不给出提示信息
(setq num (getint "Enter a number:")) ; ; ; 给出用户规定的提示信息

135. getkword

1. 功能

执行到本含户时,程序暂停下来,让用户录入一个关键字,录入关键字后函数将它返回。

二. 格式

(getkword [prompt])

三. 说明

本函数可接受的有效关键字是在调用本函数(getkword)之前,由initget函数设置的。Prompt变元是一个可选的作为提示信息显示的一个字符串。Getkword函数以字符串的形式返回与用户的输入相匹配的关键字。如果用户输入不是一个关键字,则AutoCAD会让用户再来一次。如果用户输入为空(即按回车健),getkword函数返回nil(如果空输入被允许的话)。如果在调用getword函数之前,没有调用Initget函数确立一个或

多个关键字,getkword函数返回nil。

用户不能录入另一个AutoLISP表达式去响应getword函数的录入请求。

四. 实例

例1. 下面的程序实例中,首先调用initget函数确立了一个关键字表(Yes和No),并且不允许空输入(这由initget函数变元bits的值为1来完成),接着就调用getword函数让用户选择关键字:

(initget 1 "Yes No")
(setq x (getkword "Are you sure"(Yes or No"))

这段代码提示用户坐输入并将用户的输入存入变量x中,用户的输入只能是Yes或No两者之一。如果用户输入的关键字与程序中设置的不匹配,或者用户给出了一个空回答,AutoCAD将再一次给出由变元prompt提供的提示符,让用户再一次回答。如果再调用getkword函数时没有为它提供变元prompt,则 AutoCAD会为本函数提更如下的提示信息:

Try again:

例2.下面的程序一个用于AutoCAD的图元编辑的程序的主控程序。其中的EDLINE、EDARC、EDCIRCLE、EDTEXT、EDPLINE分别为处理直线、圆弧、圆、文本和多义线对象的无参函数。程序中省略了这些函数的具体实现细节,在主控程序中,首先调用initget函数设置要用getkword函数返回的关键字,根据用户的输入调用程序的功能函数,完成屏幕图形的编辑。

(defun C:EDENTITY (/key)
(initget "Line Pline Arc Circle Text Exit")
(prompt "\n Pleseselect following entity to edit:")
(setakey (getword "\n Line \\ Pline\\ Arc \\ Circle \\ Text \\(Cond ((or (not key) (key "Exit")) ' Good-bye)
((=key "Line") (EDLINE))
((=key "Pline") (EDPLINE))
((=key "Are") (EDARC))
((=key "Circle") (EDCIRCLE))
((=key "Text") (EDTEXT))
)
)

136. getorient

一. 功能

执行该函数程序暂停,等待用户输入一个角度,然后以弧度形式返回这个角度。

二. 格式

(getorient [pt] [prompt])

三. 说明

这个函数与getangle函数类似,除去由getorient函数返回的角度值不受系统变量ANGBASE和ANGDIR的影响这一点不同之外。然而,由用户输入的角度仍然还是以现行ANGDIR和ANGBASE的设置为基准。

变元pt是以现行USC表示的一个2D的基点,变元prompt是作为提示信息显示的一个字符串。如果指定了变元pt,则把它作为两点中的第一点,通过指定另一个点用户就能为AutoLISP给出一个角度。您也可以提供一个3D点作为基点,但该角度总是在现行构造平面中测量的。

Getorient函数测量由用户指定的两点确定的直线与零弧度方向(正东方,即时钟三点位置)之间的角度,角度的增量方向是逆时针方向。正如getangle函数一样,getorient函数相对于现行构造平面以弧度的形式返回角度值。由getorient函数输入的角度

是以现行ANGDR和ANGBASE的设置为基准。然而,一但该角度值被输入,对它的测量则是相对于零弧度(正东方向,即时钟三点的位置)按逆时钟方向进行的,而忽略系统变量ANGBASE和ANGDR系统变量,选择了一种不同的零度基准方向或一种不同的角度增量方向,在使用getorient函数的过程中就必然会发生某些转换。

当您需要一个旋转量(一个相对角度),应使用getangle函数。而当您需要获得一个定向(一个绝对角度)时,就应使用getorient函数。

用户不能录入另一个AutoLISP表达式去响应getorient函数的输入请求。

四. 实例

下面的程序可按照用户指定的起点、角度和长度画线。其中(drt)是将以度表示的角度转换成弧度的函数。

(defun C:anglelin (/ pint1 pint2 pint3 a al d)
(graphscr)
(setvar "blipmode"0)
(setq pnt1 (getpoint "\nEnter beginning point:"))
(setq a (getorient pnt1 "\nPoint direction of line:"))
(setq b (getdist "\nPoint distance of line:"))
(setq pnt2 (polar pnt1a d)
(command "line" pnt1 pnt2 "")
(setq d (getreal "\nEnter distance fromkeyboard:"))
(setq a1 (getreal "\nEnter decima angle from deyboard:"))
(setq a (dtr a1))
(setq pnt3(polar pnt2 a d))
(command "line" pnt2 pnt3 "")
)



137. getpoint

1. 功能

暂停让用户输入一个点,然后将该点的值返回。

二. 格式

(getpoint [pt] [prompt])

三. 说明

变元pt是以现行UCS表示第一个2D或3D基点,变元prompt是执行该函数时要作为提示信息显示的一个字符串。通过在屏幕拾取点,或通过路入以现行单位格式表示的一个坐标,用户可完成一个点的指定。如果在调用getpoint函数时提供了任选了任选变元pt,AutoCAD就会从该点起到现行十字关标的位置上画一条橡皮线,所返回的值是以现行UCS为单位表示的一个3D点。

用户不能录入另一个AutoLISP表达式来响应getpoint函数的输入请求。

四. 实例

(setq p (getpoint))
(setq p (getpoint "Where?"))
(setq p (getpoint '(1.5 2.0 ) "Second point:"))

 

138. getreal

1. 功能

程序暂停让用户输入一实型数(浮点数),并返回该数。

二. 格式

(getreal [prompt])

三. 说明

prompt变元是一个可选的在执行该函数时要作为提示信息显示的字符串。
用户不能录入另一个AutoLISP表达式去响应getreal函数的输入请求。

四. 实例

(setq val (getreal))
(setq val (getreal "Scalefactor:"))

139. getstring

1. 功能

暂停让用户输入一个字符串,并返回这个字符串。

2. 格式

(getstring [cr][prompt])

三. 说明

如果cr变元被提供且它的值为非空,输入的字符串可以包含空格(但必须用

结束。Prompt变元是在执行该函数时作为提示信息显示的一个字符串。

如果用户输入的字符串的长度超过了132个字符,则仅有开头的132个字符串被返回。如果输入的字符串中包含了右下斜杠(\),则会将这个右下斜杠转换成两个(\\)。这样做事因为在用户输入的字符串中,也许会包含可由其它函数使用的文件路径名。

用户不能录入另一个AutoLISP表达式去响应getstring函数的输入请求。

如果在应用程序中,要求用户录入若干个已知关键字之一的那样一个字符串时,您应该使用getkword函数,而不要使用本函数。

四. 实例

例1.(setq s (getsring "What's your first name?"))

用GUO响应,则将变量s的内容设置为 "GUO"。

例2. (setq s (getstring T "What's your full name?"))

用GUO PingPing去响应,则将变量s设置为 "GUO Ping Ping"。

例3.(setq s (getstring "Enter filename:")

用\ACADRB\MYDWG去响应,则将变量s的内容设置为<\\ACADRB\\MYDWG>。

150 inters

一. 功能

求两直线的交点。

二. 格式

(inters pt1 pt2 pt3 pt4 [onseg])



三. 说明

____________________________________
bits变元的取值 说明
____________________________________
 8(位3) 允许用户在现行图形的极限之外录入一个点。即使AutoCAD的系统
变量LIMCHECK现行被设置为开(ON),本规则也照样对随后的用户
输入函数的调用有效
_____________________________________
 16(位4) 目前还没有被使用
_____________________________________
 32(位5) 当画橡皮线或拉伸方框时使用虚线。可由用户在图形屏幕上通过选择
一个位置来指定一个点那些函数,这个控制位的设置将使得橡皮线和
拉伸方框的显示由实线变成虚线(某些显示驱动程序使用一种醒目的
颜色来代替虚线)。如果系统变量POPUPS设置为0,AutoCAD将忽
略这个控制位的作用
_____________________________________
 64(位6)在使用getdist函数时,本控制位禁用Z坐标的输入,这样可以保证在使用
getdist函数的应用程序中,返回的是2D距离
_____________________________________
 128(位7)在尊重任何其它的控制位和所列出的

关键字的情况下,允许任意的输入,
只要它是一个关键字。这个控制的优先权高于0位;如果位7(128)设置为
0,用户按 争键响应函数的输入请求,则返回一个空字符串
______________________________________

 

对于一个特定的getxxx函数来说,只有特定的控制位才有意义,下表对此作了全面总结。

用户输入函数及可用的控制位总结
___________________________________________________________
非空 非零 非负 不检查极限 使用虚线 2D距离 任意输入
(1) (2) (4) (8) (32) (64) (128)
___________________________________________________________
getint y y y y
___________________________________________________________
getreal y y y y
___________________________________________________________
getdist y y y y y y
___________________________________________________________
getangle y y y y
___________________________________________________________
getorient y y y y
___________________________________________________________
getpoint y y y y
___________________________________________________________
getcorner y y y y
___________________________________________________________
getkword y y
___________________________________________________________
entsel
___________________________________________________________
nentsel
___________________________________________________________
nentselp
___________________________________________________________ 

 

四. 实例

(defun getnum (/ x)
(initget 1"Pi Two-Pi")
(setq x (getreal "Pi/Two-Pi/:"))
(cond ((eq x "Pi") Pi)
((eq x "Two-Pi")(* 2.0 Pi))
(T x)
)
)

173 nentsel

一. 功能

提示用户通过指定一个点来选择一个对象(图元),从而对包含在一个复杂对象内的定义提供访问。

二. 格式

(nentsel [prompt])

三. 说明

prompt是当作提示信息显示的一个字符串。如果调用nentsel函数时没有指定这个可选变元,则会发出"Select objects"提示。

nentsel函数提示用户选择一个对象。现行的Object Snap模式会被忽略,除非用户专门指定了它。为了在Command:提示处提供更多的补充支持,nentsel函数对前面用initget函数定义的关键字给予充分尊重。

当用户选择的对象不是一个复杂对象(如:多义线或图块

),nentsel函数返回与entsel函数相同的信息。然而,如果所选对象是一条多义线,nentsel函数返回一个表,该表包含了一个子图元(顶点)名和拾取点坐标。这与entsel函数返回的表是类似的,除了nentsel函数所返回的是多义线的所选顶点名,而不是多义线的头部(header)图元名这一点不同之外。nentsel函数总是返回所选取的多义线的那一小段的起始顶点。例如,拾取一条多义线的第三段,返回的是整条多义线的第三个顶点。一条多义线的SEQEND子图元永远不能用nentsel函数返回。

选取一个块引用中的一条属性,返回的是该属性的属性名和拾取点坐标。当所选取的是一个块引用中的一个元件(component)而不是一条属性时,nentsel函数返回包含了四个元素的一个表。对这四个元素说明如下:

(1)拾取在块中的一个对象而返回的一个表的第一个元素是被拾取图元的较长元名。

(2)第二个元素是一个表,它是拾取该对象时用户所指定的拾取点的坐标。

(3)第三个元素称为模型到世界转换矩阵。它也是一个表,该表由四个子表组成,这四个子表的每一个都包含了一个坐标集。这个矩阵可以用来将用内部坐标系(该内部坐标系通常简称为模型坐标系,简写为MCS)表示的图元数据转换成用世界坐标系(简写为WCS)来表示。包含了所选图元的那个块的插入点,定义了MCS的原点。而该块被生成时的UCS的定向(orientation)决定MCS轴的方向。

(4)第四个元素是一个表,它包含的是块图元名,也就是用户所选的图元所依附的那个块的图元名。如果所选对象是嵌套块(即块中块)中的一个对象,那么,该表分会包含所有块的图元名。这些块的图元名的排列顺序是,包含了所选对象(图元)的最深层嵌套块的图元名在前,顺序排列,直到最层块的图层名(最外层块也应是将块插入到图形中时所使用的那个块名)。 我们将nentsel函数应用于嵌套块时,该函数所返回的表结构示意说明如下:

((Px Py Pz) ;;;用户拾取点的坐标值
((X0 Y0 Z0) ;;;模型坐标系到世界坐标系的转换矩阵
(X1 Y1 Z1) ;;;
(X2 Y2 Z2) ;;;
(X3 Y3 Z3) ;;;
)
( ;;;包含了所选图元的最深嵌套块的图元名
... ;;;
... ;;;
;;;包含了所选图元的最外层块的图元名


一旦获得了图元和模型世界坐标系的转换矩阵,您就可以将图元定义数据点从MCS转换到WSC上。使用entget和assoc函数,就可以从图元名开始获得以MCS坐标

系表示的图元数据定义点。由nentsel函数返回的MCS和WCS转换矩阵具有与nentselp函数返回的矩阵同样用途,但是它是一个4x3的矩阵(作为四个点的一个数给传递),它被约定为每一行表示一个点,而不是每一列表示一个点。MCS到WCS间的转换,可用如下的矩阵乘法来描述:

(此处待补一图片)

从上述等式可以派生出一个新的计算公式:

X'=XM00+YM10+ZM20+M30
Y'=XM01+YM11+ZM21+M31
Z'=XM02+YM12+ZM22+M32



上述中的Mij(0<=i,j<=2),是模型到世界转换矩阵坐标;X、Y、Z是以MCS坐标表示的图元定义数据点,而X'、Y'、Z'是转换后的以WCS坐标表示的结果图元定义数据点。

nentsel是唯一的使用上述这种类型的转换矩阵的AutoLISP函数。nentselp函数返回的一个矩阵本函数所返回的矩阵有点类似,但它可以由其它的AutoLISP和ADS函数使用。

174 nentselp

一. 功能

在没有用户输入情况下,本函数提供与nentsel函数类似的功能。

二. 格式

(nentselp [prompt [pt])

三. 说明

除去可选变元prompt之外,nentselp函数还接受作为任选变元的一个选择点pt。这就允许没有用户输入的情况下完成对象的选择。nentselp函数返回一个4x4的转换矩阵,其定议格式如下:

 

(此处待补一图片) 

 

该矩阵的开头三列指定缩放比例和旋转角度,第四列是一个转换矢量。

使用这种类型的矩阵的函数将一个点看成是四维的一个列矢量。点用齐次坐标表示,点矢量的第四个元素是一个比例因子,通常它的值被设置成1.0。该矩阵的最后一行,也就是矢量[M30M31M32M33],有标准值[0 0 01];它通常被使用这种矩阵格式的函数所忽略。按照这种约定,对一个点作转换实际上是做如下的矩阵乘法运算:

(此处待补一图片)

这实际上给出了点的单个坐标值的如下计算公式:

X'=XM00+YM01+ZM02+MO3(1.0)
Y'=XM10+YM11+ZM12+M13(1.0)
Z'=XM20+YM21+ZM22+M23(1.0)

正如上述公式中所表明的那样,比例因子和矩阵的最后一行对计算不会有影响,它们被忽咯。


相关文档
最新文档