几何类中点运算的基本测试
用lisp和VBA的时候,没有几何类,点、向量、矩阵都用表和数组来定义。AutoCAD.NET的Geometry命名空间里有许多几何类,其中最基础的有五个,点(Point3d)、向量(Vector3d)、矩阵(Matrix3d)、平面(Plane)和坐标系(CoordinateSystem3d),这些类具有的丰富成员使得编程更加方便。下面是点对象加减乘除方法的测试。注意第四种乘法运算,说明TransformBy是用左乘矩阵实现的。指定任意点:新建点:New Point3d = (0,0,0)
共享属性:Point3d.Origin = (0,0,0)
----------------------------------
输入点:ptUcs = (200,100,0)
加法运算一:ptUcs.Add(New Vector3d(10, 20, 0)) = (210,120,0)(返回Point3d)
加法运算二:ptUcs + New Vector3d(10, 20, 0) = (210,120,0)(返回Point3d)
减法运算一:ptUcs.Subtract(New Vector3d(10, 20, 0)) = (190,80,0)(返回Point3d)
减法运算二:ptUcs - New Vector3d(10, 20, 0) = (190,80,0)(返回Point3d)
减法运算三:ptUcs - New Point3d(10, 20, 0) = (190,80,0)(返回Vector3d)
乘法运算一:ptUcs.MultiplyBy(2) = (400,200,0)(返回Point3d)
乘法运算二:ptUcs * 2 = (400,200,0)(返回Point3d)
乘法运算三:2 * ptUcs = (400,200,0)(返回Point3d)
乘法运算四:UcsMatrix * ptUcs = (100,200,0)(返回Point3d)
除法运算一:ptUcs.DivideBy(2) = (100,50,0)(返回Point3d)
除法运算二:ptUcs / 2 = (100,50,0)(返回Point3d)
本帖最后由 lzh741206 于 2010-12-12 16:28 编辑
几何类的使用可以很大程度的简化代码,期待河伯老兄的后续测试,呵呵
补充一点关于TransformBy的
var pt = new Point3d(10, 10, 0);
ed.WriteMessage("\nPoint:{0}", pt);
var mat = Matrix3d.Displacement(new Vector3d(10, 0, 0));
pt = mat * pt;
ed.WriteMessage("\nPoint:{0}", pt);
pt = pt.TransformBy(mat);
ed.WriteMessage("\nPoint:{0}", pt);
结果
Point:(10,10,0)
Point:(20,10,0)
Point:(30,10,0)
Point3d.Origin 似乎应该叫做静态公用属性
关键的是理解图形学上的含义(不过楼主这样做对初学者应该很有帮助)
自己去看类的定义,更能知道一个类有些什么,能做些什么。 期待后续的测试例子... 补充一点关于TransformBy的
吓我一跳,呵呵! Dim pt1 As New Point3d(10, 10, 0)
ed.WriteMessage(vbLf & "Point1:{0}", pt1)
Dim mat As Matrix3d = Matrix3d.Displacement(New Vector3d(10, 0, 0))
Dim pt2 = Matrix3d.Displacement(New Vector3d(10, 0, 0)) * pt1
ed.WriteMessage(vbLf & "Point2:{0}", pt2)
Dim pt3 As Point3d = pt1.TransformBy(mat)
ed.WriteMessage(vbLf & "Point3:{0}", pt3)
Point1:(10,10,0)
Point2:(20,10,0)
Point3:(20,10,0) Point3d.Origin 似乎应该叫做静态公用属性
VB.NET里,微软就是这么叫的。看过一篇文章解释了为什么C#和VB的叫法不同,似乎编译后确实有差异。 请问坐标变换之后Point3d.Origin会改变还是一直是(0,0,0)? Point3d是只读的,不可改变的
和string有点类似 河伯 发表于 2010-12-12 11:59 static/image/common/back.gif
VB.NET里,微软就是这么叫的。看过一篇文章解释了为什么C#和VB的叫法不同,似乎编译后确实有差异。
VB和VB.Net是有区别的
基于.Net框架的语言(含C#,VB.Net),里面的任何东西都是和类相关的,任何类型的常量变量也都是存在于类(需要说是某个类的变量或常量)。和以前的模块式公共变量和私有变量是有区别(它们可以单独存在)(当然,公用静态变量和楼主所说的共享属性功能应该是一样的) lzh741206 发表于 2010-12-12 16:26 static/image/common/back.gif
Point3d是只读的,不可改变的
和string有点类似
斑竹我要较真了,应该说Point3d.Origin是只读的。
页:
[1]
2