【VB6.0】极坐标系转垂直坐标系源码

哈里最近写了一下垂直坐标系转极坐标系的源码。

过程大概是求圆的方程与直线交点坐标,从而得到极坐标系到垂直坐标系的位置。逆过程暂时不需要所以没有写。

建立一个模块,命名为:极坐标运算模块。

模块内码入如下代码:

Public Type 二维坐标
    X As Double
    Y As Double
    End Type

Public Const 一弧度 = 0.0174532925, PI = 3.14159265, TAU = 6.2831853

Public Function 极坐标转垂直(ByVal r As Double, ByVal a As Double, Optional 角度 As Boolean = True) As 二维坐标

    'r 半径;a 角度;角度 true代表角度,false代表弧度

    Dim tana As Double, rSqr1tana2 As Double '缓存数值,加快运算

    If 角度 Then
        a = a * 一弧度
    End If

    a = a - a \ TAU * TAU '将周期收拢到一个基本周期内,方便下面的象限判断

    tana = Tan(a)
    rSqr1tana2 = r / Sqr(1 + tana ^ 2)

    If a <= PI Then
        极坐标转垂直.X = rSqr1tana2
        极坐标转垂直.Y = rSqr1tana2 * tana
    Else
        极坐标转垂直.X = -rSqr1tana2
        极坐标转垂直.Y = -rSqr1tana2 * tana
    End If

End Function

调用如下(假设我要在窗体Form1上,圆心为(3000,3000)的地方绘制一个半径1000的圆,方法装在按钮Command1中):

Private Sub Command1_Click()

    Dim i As Single, p As 二维坐标
    
    For i = 0.1 To 360 Step 0.1
        p = 极坐标转垂直(1000, i)
        Me.PSet (3000 + p.X, 3000 + p.Y), 255
    Next
    
End Sub

效果如下:

【VB6.0】极坐标系转垂直坐标系源码_第1张图片

不过貌似思路有些复杂了,简化的模块代码如下:

Public Type 二维坐标
    X As Double
    Y As Double
    End Type

Public Const 一弧度 = 0.0174532925

Public Function 极坐标转垂直(ByVal r As Double, ByVal a As Double, Optional 角度 As Boolean = True) As 二维坐标

    'r 半径;a 角度或弧度;角度 true代表角度false代表弧度

    If 角度 Then
        a = a * 一弧度
    End If

    极坐标转垂直.X = Cos(a) * r
    极坐标转垂直.Y = Sin(a) * r
    
End Function

 

你可能感兴趣的:(VB遇到的那些事)