Declare Function PolyBezier Lib "gdi32" ( _ ByVal hDC As Long, _ ByRef Points As POINT, _ ByVal PointNum As Long) As Long
Pointsで指定した配列中の一番目の座標が一番目のベジエ曲線の始点となる。二番目、三番目の座標が一番目のベジエ曲線の制御点となる。四番目の座標は、一番目のベジエ曲線の終点となると共に二番目のベジエ曲線の始点となる。以下同様に、3n+1番目の座標はn番目のベジエ曲線の終点となると共にn+1番目のベジエ曲線の始点となり、3n+2番目および3n+3番目の座標がn+1番目のベジエ曲線の制御点となる。
現在位置は更新されない。
引数の意味は以下の通り。
hDC | 描画先のデバイスコンテキストのハンドル。 |
Points | ベジエ曲線群を描画する元の情報となる座標の配列。 |
PointNum | Pointsで指定した配列の要素の数。n個のベジエ曲線を描画する場合、3n+1でなければならない。 |
戻り値は、関数の実行に成功したか否かを表す真偽値である。
Private Sub Command1_Click() Const Speed As Single = 1 Const PointNum As Long = 31 '3の倍数+1 Dim Points(PointNum - 1) As POINT Dim X(PointNum - 1) As Single Dim Y(PointNum - 1) As Single Dim DX(PointNum - 1) As Single Dim DY(PointNum - 1) As Single Dim I As Long Dim J As Long For I = 0 To PointNum - 1 X(I) = Rnd * 200 Y(I) = Rnd * 200 DX(I) = Rnd * Speed - Speed / 2 DY(I) = Rnd * Speed - Speed / 2 Next Picture1.AutoRedraw = True For J = 0 To 3000 For I = 0 To PointNum - 1 If X(I) + DX(I) < 0 Or X(I) + DX(I) > 200 Then DX(I) = -DX(I) If Y(I) + DY(I) < 0 Or Y(I) + DY(I) > 200 Then DY(I) = -DY(I) X(I) = X(I) + DX(I) Y(I) = Y(I) + DY(I) Points(I).X = X(I) Points(I).Y = Y(I) Next 'よりなめらかな曲線を書くには、以下のコメントを外す ' For I = 3 To PointNum - 2 Step 3 ' Points(I).X = (X(I - 1) + X(I + 1)) / 2 ' Points(I).Y = (Y(I - 1) + Y(I + 1)) / 2 ' Next Picture1.Cls PolyBezier Picture1.hDC, Points(0), PointNum DoEvents Next End Sub