3D点的平⾯投影公式及程序
物体点P相对于V在Screen上的投影,因为是作为上计算机使⽤的,所以采⽤了计算机上的坐标系来推算(理论上在其他直⾓坐标系也通⽤)
其中计算公式:
经过验算没有错误,其中得到的值P'的点是⼀个相对的值,可以通过变换坐标系原点到屏幕中⼼来实现.
详细见程序小孩过生日
程序实例中的⽰例图形是如下的⼀个空间中的长⽅形.
如下是程序Test中录制的动态截图(从SkyDrive上传的,外链不知会保持多久.源地址:):
唯⼀⼀点可能就是这个是⽤VS2010写的,有些代码可能不兼容,不过⼤体上没有关系,我说利⽤到的不过只是快捷设置属性这⼀点,以
及.NetFramework 4 版本的System.Drawing名称空间
总体来说感觉不是很理想,没有达到最期待的效果,如下给出下载地址(包括主类和Test窗体),欢迎给予猜猜我是谁教案
改进,最好在改进后再回复我⼀下,可以让我也学习学习.⾮常期待.谢谢
什么相呼应下载: 91KB 02010/5/15 16:06:16
下⾯是全部代码(Projection3D.vb ClassLibrary)
关键是在于3D点道平⾯点的换算
1Imports System.Drawing怎么拼读英语
美丽岛事件2Namespace Projection3D
3Public Class Point3D
4Property X As Long
5Property Y As Long
6Property Z As Long
7Sub New(ByVal X As Long, ByVal Y As Long, ByVal Z As Long)
8MyClass.X = X
9MyClass.Y = Y
10MyClass.Z = Z
11End Sub
12End Class钱包怎么画
13Public Class Projection3D
14Property ViewPoint As Point3D
15Property ObjPoint As Point3D
16Private Projection As Point
17ReadOnly Property ProjectionPoint As Point
18Get
19Return ProjectionPoint
20End Get
21End Property
22Sub New(ByVal Vp As Point3D, ByVal Op As Point3D)
23 ViewPoint = Vp
24 ObjPoint = Op
25 GetProjection()
26End Sub
27Public Function GetProjection() As Point
28If UnError() = 0Then
29 Projection.X = (ViewPoint.Z * ObjPoint.X - ViewPoint.Z * ViewPoint.X) / (ViewPoint.Z - ObjPoint.Z)
30 Projection.Y = (ViewPoint.Z * ObjPoint.Y - ViewPoint.Z * ViewPoint.Y) / (ViewPoint.Z - ObjPoint.Z) 31Return Projection
32El
33Return New Point(0, 0)
34End If
35
36End Function
37Public Function UnError() As Integer
38If ViewPoint.Z - ObjPoint.Z = 0Then
39Return1
40El
41Return0
女职工劳动保护特别规定42End If赛扬g530
43End Function
44End Class
45End Namespace
46