【Word VBA】リサジュ―曲線模様描画マクロ▽ソースコード

記事
IT・テクノロジー
HC230504A.png

Option Explicit
Option Base 0
'
Public Sub リサジュ―曲線模様描画マクロ()
    Const LISSLEFT = 80        '描画開始位置X
    Const LISSTOPP = 80       '      Y
    '
    Const LISSCOLS = 6        '横/描画数
    Const LISSROWS = 5         '縦/描画数
    '
    Const LISSANSP = 5        '描画刻み角度
    Const LISSRATE = 20        '線の長さレート
    '
    Const LISSCASE = 4        'リサージュの種類
    Const LISSVPIT = LISSRATE * 2.25     '横/描画間隔
    Const LISSHPIT = LISSRATE * 2.25     '縦/描画間隔
    '
    Const LISSLNWE = 1.5 '線の太さ
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim Kp As Integer, Lp As Integer
    Dim intDxp As Integer, intDyp As Integer
    Dim sngPBas(LISSCASE - 1, 360 / LISSANSP, 1) As Single
    Dim sngPDat(360 / LISSANSP, 1) As Single
    Dim sngSit As Single, sngRpd As Single
    Dim sngRds As Single
    '
    'リサージュ曲線のポリラインデータ作成
    'x=sin(n*θ)/ y=sin(m*θ)
    sngRpd = Atn(1) / 45
    For Lp = 0 To UBound(sngPBas, 1)
        For Kp = 0 To UBound(sngPBas, 2)
            sngSit = sngRpd * (Kp * LISSANSP)
            Ip = Choose(Lp + 1, 2, 3, 5, 7)
            Jp = Choose(Lp + 1, 3, 4, 4, 8)
            sngPBas(Lp, Kp, 0) = Sin(Ip * sngSit) * LISSRATE
            sngPBas(Lp, Kp, 1) = Sin(Jp * sngSit) * LISSRATE
       Next Kp
    Next Lp
    '
    Lp = 0
    For Jp = 0 To LISSROWS - 1
        intDyp = LISSTOPP + LISSHPIT * Jp _
               + LISSHPIT / 2
        For Ip = 0 To LISSCOLS - 1
            intDxp = LISSLEFT + LISSVPIT * Ip _
                   + LISSVPIT / 2
            '*ポリラインデータ位置設定
            For Kp = 0 To UBound(sngPBas, 2)
                sngPDat(Kp, 0) = _
                sngPBas(Lp Mod LISSCASE, Kp, 0) _
                               + intDxp
                sngPDat(Kp, 1) = _
                sngPBas(Lp Mod LISSCASE, Kp, 1) _
                               + intDyp
            Next Kp
            '*ポリラインデータ描画
            With ActiveDocument.Shapes.AddPolyline(sngPDat)
                .Fill.Visible = msoFalse
                .Line.Visible = msoTrue
                .Line.ForeColor = _
                Choose((Lp Mod LISSCASE) + 1, _
                RGB(218, 165, 32), RGB(0, 100, 0), _
                RGB(0, 128, 128), RGB(106, 90, 205))      '←線色
               .Line.Weight = LISSLNWE                          '←線の太さ
           End With
           Lp = Lp + 1
        Next Ip
    Next Jp
End Sub

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す