乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 121|回复: 9

几何类中点运算的基本测试

[复制链接]

13

主题

84

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2010-12-12 11:06:00 | 显示全部楼层 |阅读模式
用lisp和VBA的时候,没有几何类,点、向量、矩阵都用表和数组来定义。.NET的Geometry命名空间里有许多几何类,其中最基础的有五个,点(Point3d)、向量(Vector3d)、矩阵(Matrix3d)、平面(Plane)和坐标系(CoordinateSystem3d),这些类具有的丰富成员使得编程更加方便。下面是点对象加减乘除方法的测试。注意第四种乘法运算,说明TransformBy是用左乘矩阵实现的。
  1. 指定任意点:
  2. 新建点:New Point3d = (0,0,0)
  3. 共享属性:Point3d.Origin = (0,0,0)
  4. ----------------------------------
  5. 输入点:ptUcs = (200,100,0)
  6. 加法运算一:ptUcs.Add(New Vector3d(10, 20, 0)) = (210,120,0)(返回Point3d)
  7. 加法运算二:ptUcs + New Vector3d(10, 20, 0) = (210,120,0)(返回Point3d)
  8. 减法运算一:ptUcs.Subtract(New Vector3d(10, 20, 0)) = (190,80,0)(返回Point3d)
  9. 减法运算二:ptUcs - New Vector3d(10, 20, 0) = (190,80,0)(返回Point3d)
  10. 减法运算三:ptUcs - New Point3d(10, 20, 0) = (190,80,0)(返回Vector3d)
  11. 乘法运算一:ptUcs.MultiplyBy(2) = (400,200,0)(返回Point3d)
  12. 乘法运算二:ptUcs * 2 = (400,200,0)(返回Point3d)
  13. 乘法运算三:2 * ptUcs = (400,200,0)(返回Point3d)
  14. 乘法运算四:UcsMatrix * ptUcs = (100,200,0)(返回Point3d)
  15. 除法运算一:ptUcs.DivideBy(2) = (100,50,0)(返回Point3d)
  16. 除法运算二:ptUcs / 2 = (100,50,0)(返回Point3d)

回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-12 11:27:00 | 显示全部楼层

几何类的使用可以很大程度的简化代码,期待河伯老兄的后续测试,呵呵
补充一点关于TransformBy的
复制代码
结果
Point:(10,10,0)
Point:(20,10,0)
Point:(30,10,0)
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2010-12-12 11:48:00 | 显示全部楼层
Point3d.Origin 似乎应该叫做静态公用属性
关键的是理解图形学上的含义(不过楼主这样做对初学者应该很有帮助)
自己去看类的定义,更能知道一个类有些什么,能做些什么。
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-12-12 11:53:00 | 显示全部楼层
期待后续的测试例子...
回复

使用道具 举报

13

主题

84

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2010-12-12 11:54:00 | 显示全部楼层

吓我一跳,呵呵!
  1.         Dim pt1 As New Point3d(10, 10, 0)
  2.         ed.WriteMessage(vbLf & "Point1:{0}", pt1)
  3.         Dim mat As Matrix3d = Matrix3d.Displacement(New Vector3d(10, 0, 0))
  4.         Dim pt2 = Matrix3d.Displacement(New Vector3d(10, 0, 0)) * pt1
  5.         ed.WriteMessage(vbLf & "Point2:{0}", pt2)
  6.         Dim pt3 As Point3d = pt1.TransformBy(mat)
  7.         ed.WriteMessage(vbLf & "Point3:{0}", pt3)
Point1:(10,10,0)
Point2:(20,10,0)
Point3:(20,10,0)
回复

使用道具 举报

13

主题

84

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2010-12-12 11:59:00 | 显示全部楼层

VB.NET里,微软就是这么叫的。看过一篇文章解释了为什么C#和VB的叫法不同,似乎编译后确实有差异。
回复

使用道具 举报

19

主题

154

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
230
发表于 2010-12-12 12:06:00 | 显示全部楼层
请问坐标变换之后Point3d.Origin会改变还是一直是(0,0,0)?
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-12 16:26:00 | 显示全部楼层
Point3d是只读的,不可改变的
和string有点类似
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2010-12-12 18:07:00 | 显示全部楼层

VB和VB.Net是有区别的
基于.Net框架的语言(含C#,VB.Net),里面的任何东西都是和类相关的,任何类型的常量变量也都是存在于类(需要说是某个类的变量或常量)。和以前的模块式公共变量和私有变量是有区别(它们可以单独存在)(当然,公用静态变量和楼主所说的共享属性功能应该是一样的)
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2010-12-12 18:11:00 | 显示全部楼层

斑竹我要较真了,应该说Point3d.Origin是只读的。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 10:35 , Processed in 1.026947 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表