1 Imports System.Drawing
2 Imports System.Runtime.CompilerServices
3 Imports Microsoft.VisualBasic.Math
4
5 Namespace Imaging.Math2D
6
7     ''' <summary>
8     ''' 极坐标点
9     ''' </summary>
10     Public Class PolarPoint
11
12         Public Property Radius As Double
13         ''' <summary>
14         ''' Unit in degree.(单位为度)
15         ''' </summary>
16         ''' <returns></returns>
17         Public Property Angle As Single
18
19         ''' <summary>
20         ''' 与这个极坐标点等价的笛卡尔直角坐标系上面的坐标点
21         ''' </summary>
22         ''' <returns></returns>
23         Public ReadOnly Property Point As PointF
24             <MethodImpl(MethodImplOptions.AggressiveInlining)>
25             Get
26                 Return (Radius, Angle).ToCartesianPoint
27             End Get
28         End Property
29
30         ''' <summary>
31         ''' 显示这个极坐标点
32         ''' </summary>
33         ''' <returns></returns>
34         Public Overrides Function ToString() As String
35             Return $"({Radius}, {Angle}°)"
36         End Function
37
38         Public Shared Widening Operator CType(polar As (radius#, angle!)) As PolarPoint
39             Return New PolarPoint With {
40                 .Angle = polar.angle,
41                 .Radius = polar.radius
42             }
43         End Operator
44     End Class
45 End Namespace