VB.Net Tutorial/Development/Math

Материал из VB Эксперт
Перейти к: навигация, поиск

Convert rectangular 3D coordinates to cylindrical coordinates.

<source lang="vbnet">"Convert cylindrical coordinates to rectangular 3D coordinates.

       " ----- Convert rectangular 3D coordinates to
       "       spherical coordinates.
       " ----- Convert spherical coordinates to
       "       rectangular 3D coordinates.
       " ----- Convert spherical coordinates to
       "       cylindrical coordinates.        
       " ----- Convert cylindrical coordinates to
       "       spherical coordinates.        
       

" Quote from "Visual Basic 2005 Cookbook Solutions for VB 2005 Programmers "by Tim Patrick (Author), John Craig (Author) "# Publisher: O"Reilly Media, Inc. (September 21, 2006) "# Language: English "# ISBN-10: 0596101775 "# ISBN-13: 978-0596101770 Public Class Tester

   Public Shared Sub Main
       Dim result As New System.Text.StringBuilder
       Dim pointRec As New Point3D(3, 4, 5)
       Dim pointCyl As Point3D = RectToCylinder(pointRec)
       Dim pointSph As Point3D = RectToSphere(pointRec)
       Dim pointRecToCyl As Point3D = RectToCylinder(pointRec)
       Dim pointRecToSph As Point3D = RectToSphere(pointRec)
       Dim pointCylToRec As Point3D = CylinderToRect(pointCyl)
       Dim pointCylToSph As Point3D = CylinderToSphere(pointCyl)
       Dim pointSphToRec As Point3D = SphereToRect(pointSph)
       Dim pointSphToCyl As Point3D = SphereToCylinder(pointSph)
       result.AppendLine("Rec: " & pointRec.Tostring())
       result.AppendLine("Cyl: " & pointCyl.Tostring())
       result.AppendLine("Sph: " & pointSph.Tostring())
       result.AppendLine()
       result.AppendLine("Rec to Cyl: " & pointRecToCyl.Tostring())
       result.AppendLine("Rec to Sph: " & pointRecToSph.Tostring())
       result.AppendLine("Cyl to Rec: " & pointCylToRec.Tostring())
       result.AppendLine("Cyl to Sph: " & pointCylToSph.Tostring())
       result.AppendLine("Sph to Rec: " & pointSphToRec.Tostring())
       result.AppendLine("Sph to Cyl: " & pointSphToCyl.Tostring())
       Console.WriteLine(result.ToString())
   End Sub
   Public Shared Function RectToCylinder(ByVal pointA As Point3D) _
         As Point3D
       " ----- Convert rectangular 3D coordinates to
       "       cylindrical coordinates.
       Dim rho As Double
       Dim theta As Double
       rho = Math.Sqrt(pointA.X ^ 2 + pointA.Y ^ 2)
       theta = Math.Atan2(pointA.Y, pointA.X)
       Return New Point3D(rho, theta, pointA.Z)
   End Function
   Public Shared Function CylinderToRect(ByVal pointA As Point3D) _
         As Point3D
       " ----- Convert cylindrical coordinates to
       "       rectangular 3D coordinates.
       Dim x As Double
       Dim y As Double
       x = pointA.X * Math.Cos(pointA.Y)
       y = pointA.X * Math.Sin(pointA.Y)
       Return New Point3D(x, y, pointA.Z)
   End Function
   Public Shared Function RectToSphere(ByVal pointA As Point3D) _
         As Point3D
       " ----- Convert rectangular 3D coordinates to
       "       spherical coordinates.
       Dim rho As Double
       Dim theta As Double
       Dim phi As Double
       rho = Math.Sqrt(pointA.X ^ 2 + pointA.Y ^ 2 + _
          pointA.Z ^ 2)
       theta = Math.Atan2(pointA.Y, pointA.X)
       phi = Math.Acos(pointA.Z / Math.Sqrt( _
          pointA.X ^ 2 + pointA.Y ^ 2 + pointA.Z ^ 2))
       Return New Point3D(rho, theta, phi)
   End Function
   Public Shared Function SphereToRect(ByVal pointA As Point3D) _
         As Point3D
       " ----- Convert spherical coordinates to
       "       rectangular 3D coordinates.
       Dim x As Double
       Dim y As Double
       Dim z As Double
       x = pointA.X * Math.Cos(pointA.Y) * Math.Sin(pointA.Z)
       y = pointA.X * Math.Sin(pointA.Y) * Math.Sin(pointA.Z)
       z = pointA.X * Math.Cos(pointA.Z)
       Return New Point3D(x, y, z)
   End Function
   Public Shared Function CylinderToSphere(ByVal pointA As Point3D) _
         As Point3D
       " ----- Convert cylindrical coordinates to
       "       spherical coordinates.
       Dim rho As Double
       Dim theta As Double
       Dim phi As Double
       rho = Math.Sqrt(pointA.X ^ 2 + pointA.Z ^ 2)
       theta = pointA.Y
       phi = Math.Acos(pointA.Z / _
          Math.Sqrt(pointA.X ^ 2 + pointA.Z ^ 2))
       Return New Point3D(rho, theta, phi)
   End Function
   Public Shared Function SphereToCylinder(ByVal pointA As Point3D) _
         As Point3D
       " ----- Convert spherical coordinates to
       "       cylindrical coordinates.
       Dim rho As Double
       Dim theta As Double
       Dim z As Double
       rho = pointA.X * Math.Sin(pointA.Z)
       theta = pointA.Y
       z = pointA.X * Math.Cos(pointA.Z)
       Return New Point3D(rho, theta, z)
   End Function
   

End Class

Public Class Point3D

   Public X As Double
   Public Y As Double
   Public Z As Double
   Public Sub New(ByVal xPoint As Double, _
         ByVal yPoint As Double, ByVal zPoint As Double)
       Me.X = xPoint
       Me.Y = yPoint
       Me.Z = zPoint
   End Sub
   Public Overrides Function Tostring() As String
       Return "{X=" & X & ",Y=" & Y & ",Z=" & Z & "}"
   End Function

End Class</source>

Rec: {X=3,Y=4,Z=5}
Cyl: {X=5,Y=0.927295218001612,Z=5}
Sph: {X=7.07106781186548,Y=0.927295218001612,Z=0.785398163397448}
Rec to Cyl: {X=5,Y=0.927295218001612,Z=5}
Rec to Sph: {X=7.07106781186548,Y=0.927295218001612,Z=0.785398163397448}
Cyl to Rec: {X=3,Y=4,Z=5}
Cyl to Sph: {X=7.07106781186548,Y=0.927295218001612,Z=0.785398163397448}
Sph to Rec: {X=3,Y=4,Z=5}
Sph to Cyl: {X=5,Y=0.927295218001612,Z=5}

Generating random integers.

<source lang="vbnet">Module Tester

  Sub Main()
     Dim randomObject As Random = New Random()
     Dim randomNumber As Integer
     Dim output As String = ""
     Dim i As Integer
     For i = 1 To 20
        randomNumber = randomObject.Next(1, 7)
        output &= randomNumber & " "
        If i Mod 5 = 0 Then " is i a multiple of 5?
           output &= vbCrLf
        End If
     Next
     Console.WriteLine(output)
  End Sub 

End Module</source>

4 1 3 4 3
5 6 2 6 5
5 3 6 4 1
6 6 3 6 3

Math. Cos and Sin

<source lang="vbnet">Public Class Tester

   Public Shared Sub Main
       Dim X As Single
       Dim Y As Single
       X = CSng( Math.Cos(100))
       Y = CSng( Math.Sin(100))
       Console.WriteLine(X)
       Console.WriteLine(Y)
       
   End Sub

End Class</source>

0.8623189
-0.5063657

Math.Round

<source lang="vbnet">Public Class Tester

   Public Shared Sub Main
   
       Dim digits As Integer
       For digits = 0 To 5
           Console.WriteLine(Math.Round(Math.PI, digits))
       Next digits
    End Sub

End Class</source>

3
3.1
3.14
3.142
3.1416
3.14159

Math.Sqrt and Atan2

<source lang="vbnet">Public Class Tester

   Public Shared Sub Main
       Dim magnitude As Single
       Dim radians As Single
       magnitude = CSng(Math.Sqrt(100 ^ 2 + 120 ^ 2))
       radians = CSng(Math.Atan2(100, 123))
       Console.WriteLine(magnitude)
       Console.WriteLine(radians)
       
   End Sub

End Class</source>

156.205
0.6826226

Randomize

<source lang="vbnet">Option Strict On Public Module RandomizeStatement

  Public Sub Main()
     Dim number As Double = 1.0325
     
     Rnd(-1)
     Randomize(number)                        " Number is any Double
     For ctr As Integer = 1 to 10
        Console.WriteLine(Rnd())
     Next
  End Sub

End Module</source>

0.3610106
0.579608
0.2782471
0.05653632
0.2865489
0.33937
0.6398301
0.2991799
0.8264404
0.1662288