我目前正在尝试在vb.net上编写一个3D图形引擎(yaay ...),但我使用它做的数学(向量)真的很难用很多点任何建议吗?
答案 0 :(得分:2)
使用google:“vector class vb .net”
然后找到:
http://www.codeproject.com/Articles/20385/3D-Geometry-Library-Basic-Classes-and-3D-Drawing-u
答案 1 :(得分:-2)
Friend Module Func
''' <summary>
''' Program Function
''' </summary>
''' <remarks></remarks>
#Region "Vector3"
Public va, vb, vc, vd As Single
Public VectorDot1, VectorDot2 As Double
Public vectorAngle As Single
Function CalculateVector(ByVal point1 As Drawing.Point, ByVal point2 As Drawing.Point) As Double
Dim v As Single = 0
va = point2.X - point1.X
vb = point2.X - point1.Y
vc = point2.X - point1.X
vd = point2.Y - point1.Y
v = point2.X - point1.X + point2.Y - point1.Y
Return v
End Function
Function CaluclateDotProduct(ByVal pointv1 As Drawing.Point, ByVal pointv2 As Drawing.Point, ByVal pointv3 As Drawing.Point, ByVal pointv4 As Drawing.Point) As Double
Dim v1, v2 As Double
v1 = CalculateVector(pointv1, pointv2)
v2 = CalculateVector(pointv3, pointv4)
v1 = va * vb + vc * vd
v2 = va * vb + vc * vd
VectorDot1 = v1
VectorDot2 = v2
Return v1 And v2
End Function
Function VectorCrossProduct(ByVal point1 As Drawing.Point, ByVal point2 As Drawing.Point) As Double
Dim v1 As Double = CalculateVector(point1, point2)
Dim v2 As Double = CalculateVector(point1, point2)
Return va * vd - vb * vc
End Function
Function ATan2(ByVal opp As Single, ByVal adj As _
Single) As Single
End Function
Function Vector_Angle(ByVal pointv1 As Drawing.Point, ByVal pointv2 As Drawing.Point, ByVal pointv3 As Drawing.Point, ByVal pointv4 As Drawing.Point) As Double
Dim dotproduct As Double = CaluclateDotProduct(pointv1, pointv2, pointv3, pointv4)
Dim crossproduct As Double = VectorCrossProduct(pointv1, pointv2)
vectorAngle = Math.Atan2(crossproduct, dotproduct)
Return vectorAngle
End Function
#End Region
End Module
Public Class Vector3
Dim id As Integer
Dim name As String
Dim _x, _y As Single
Dim result As Double
Dim _length As Double
Dim _vector As Double
Dim _dotProduct As Double
Dim _crossProduct As Double
Dim _angle As Double
Public ReadOnly Property CrossProduct() As Double
Get
Return _dotProduct
End Get
End Property
Public ReadOnly Property DotProduct() As Double
Get
Return _dotProduct
End Get
End Property
Public ReadOnly Property Vector() As Double
Get
Return _vector
End Get
End Property
Public ReadOnly Property Length() As Double
Get
Return Core.vectorAngle
End Get
End Property
Public WriteOnly Property X() As Single
Set(ByVal value As Single)
Core.va = value
End Set
End Property
Public WriteOnly Property Y() As Single
Set(ByVal value As Single)
Core.vb = value
End Set
End Property
Public Property _Angle_() As Double
Get
Return Me._angle
End Get
Set(ByVal value As Double)
Me._angle = value
End Set
End Property
Sub New(ByVal id As Integer, ByVal name As String, ByVal point1 As Drawing.Point, ByVal point2 As Drawing.Point)
Me.id = id
Me.name = name
_vector = Core.CalculateVector(point1, point2)
End Sub
Public Sub VectorCalculate(ByVal point As Point, ByVal point2 As Point)
Core.CalculateVector(point, point2)
End Sub
Public Sub CalculateVectorLength(ByVal point1 As Drawing.Point, ByVal point2 As Drawing.Point)
_length = Core.CalculateVector(point1, point2)
End Sub
Public Sub Dot_Product(ByVal pointv1 As Drawing.Point, ByVal pointv2 As Drawing.Point, ByVal pointv3 As Drawing.Point, ByVal pointv4 As Drawing.Point)
_dotProduct = Core.CaluclateDotProduct(pointv1, pointv2, pointv3, pointv4)
End Sub
Public Sub Cross_Product(ByVal point1 As Drawing.Point, ByVal point2 As Drawing.Point)
_crossProduct = Core.VectorCrossProduct(point1, point2)
End Sub
Public Sub Angle(ByVal pointv1 As Drawing.Point, ByVal pointv2 As Drawing.Point, ByVal pointv3 As Drawing.Point, ByVal pointv4 As Drawing.Point)
_angle = Core.Vector_Angle(pointv1, pointv2, pointv3, pointv4)
End Sub