画像処理のフィルタを自作したく、VB.NETで以下のようなコードを作りました。
画像サイズは640x640固定。
Dim 角度加算値 As Double = 0
Dim 角度 As Double = 5
'中心からの距離を得る「AB = √(X1-X2)^2+(Y1-Y2)^2」
Dim X As Double = (320 - e.X) ^ 2
Dim Y As Double = (320 - e.Y) ^ 2
Dim root As Double = Math.Sqrt(X + Y)
Dim 半径 As Double = root
Dim 線分開始X As Double = 320
Dim 線分開始Y As Double = 320 - 半径
Dim radian As Double
Dim Sign As Double
Dim Cosign As Double
'文字表示
Dim i As Integer
Dim 文字 As String
Dim moji_x As Double
Dim moji_y As Double
Dim mojiretu As String = "1234567890"
For i = 0 To mojiretu.Length - 1
角度加算値 = 角度加算値 + 角度
radian = 角度加算値 * System.Math.PI / 180.0
Sign = System.Math.Sin(radian)
Cosign = System.Math.Cos(radian)
moji_x = ((線分開始X - 320.0) * Cosign - (線分開始Y - 320.0) * Sign + 320.0)
moji_y = ((線分開始X - 320.0) * Sign + (線分開始Y - 320.0) * Cosign + 320.0)
'1文字表示
moji = mojiretu.Substring(i, 1)
Grp1.GPrint(文字, moji_x, moji_y)
Next
文字自体は表示されるのですが、画像のように円からズレて表示されてしまいます。
三角関数等での倍精度小数点の誤差が出てきていると思われますが、
きちんと円になるような計算方法はないでしょうか。