球の作図です。地球の緯線・経線に相当する線で描きます。プログラムは原本[3]によりましたが、隠れ線処理がやや特殊ですので、メタファイルからの再描画はうまくいきません。
Public Sub Proc13() ' Globe
Const hankei = 200#
Const r2 = 200# * 199
Dim rad, x, y, z, x2, y2, degy, degz, idraw, insideFlg, n
Dim icol As Long
rad = pie / 180
n = 1
If Ivar > 1 Then n = 2
Dperas
Dpwind 0, 0, 640
'------------------
If n = 1 Then
For degz = -90 To 90 Step 10
x = hankei * Cos(degz * rad)
y = hankei * Sin(degz * rad)
For degy = 0 To 360
x2 = x * Cos(degy * rad)
z = x * Sin(degy * rad)
y2 = y * Cos(30 * rad) + z * Cos(60 * rad)
Dpoint x2, y2, 0
Next
Next
Else
For degz = 90 To -90 Step -10
x = hankei * Cos(degz * rad)
y = hankei * Sin(degz * rad)
For degy = -90 To 90 Step 0.5
x2 = x * Cos(degy * rad)
z = x * Sin(degy * rad)
y2 = y * Cos(30 * rad) + z * Cos(60 * rad)
If degz >= -50 Then
icol = Icolor 'save current color code
Icolor = QBColor(15)
Dpmove -x2, y2
Dpdraw x2, y2
Icolor = icol 'restore former color code
End If
Dpoint x2, y2, 0
Dpoint -x2, y2, 0
Next
Next
End If
'-----------------
For degy = 0 To 180 Step 10
idraw = True: insideFlg = True
For degz = -90 To 270 Step 0.5
x = hankei * Cos(degz * rad)
y = hankei * Sin(degz * rad)
x2 = x * Cos(degy * rad)
z = x * Sin(degy * rad)
y2 = y * Cos(30 * rad) + z * Cos(60 * rad)
If n = 1 Then
Dpoint x2, y2, 0
Else
If (x2 * x2 + y2 * y2) >= r2 Then
If insideFlg = True Then idraw = Not idraw
insideFlg = False
Else
insideFlg = True
End If
If idraw = True Or insideFlg = False Then
Dpoint x2, y2, 0
End If
End If
Next
Next
End Sub