直感的な「角度の理解」に向けて ⑤ ~ 差分を視覚化 ~

昨日は角度の大きさを感覚的に習得する為に、クイズ形式のものを作成してみた。
infoment.hatenablog.com
今日は、間違った場合について、「どの程度、正解から離れているか」の度合いを直感的に理解できるような仕掛けに挑戦する。
f:id:Infoment:20190524230509p:plain

間違いの度合いを直感的に理解する為には、五感に働きかけるのが良い。今回は、視覚に訴えてみる。具体的には、正しい扇形と間違えた扇形を重ねて、その差が分かるようにしてみる。

まず複数回扇形を作成するので、Userformの初期化にいた扇形作成箇所を、関数として外だししてみる。今回は位置やサイズは決め打ちし、色のみ渡している。

Private Sub UserForm_Initialize()
    ResetShape
End Sub
Private Function DrawShape(object_theme_color As MsoThemeColorIndex) As Shape
    Dim TempShape As Excel.Shape
    Set TempShape = ActiveSheet.Shapes.AddShape(msoShapeArc, 150, 100, 100, 100)
    With TempShape.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = object_theme_color
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Solid
    End With
    
    Set DrawShape = TempShape
End Function
Private Sub ResetShape()
    Set Shape = DrawShape(msoThemeColorAccent1)
    
    ScrollBar1.Min = 0
    ScrollBar1.Max = 360
    ScrollBar1.Value = 90
End Sub

あとは、解答で作成した扇形を描画するだけだ。なお、注意点は以下の通り。

  1. 指定角度より大きい場合 ⇒ 描画したうえで、最背面に移動する。
  2. 指定角度より小さい場合 ⇒ 描画して重ねておく。

こうしておかないと、元の扇形が隠れてしまい、差が分からなくなる。

Dim Shape As Excel.Shape
Dim Wrong As Excel.Shape
Dim Answer As Long
Private Sub JudgeButton_Click()
    Dim Result As Long
        Result = ScrollBar1.Value - Answer
        If Result < 0 Then
            Set Wrong = DrawShape(msoThemeColorAccent2)
                Wrong.Adjustments.Item(1) = Answer * -1
                Wrong.ZOrder msoSendToBack
            MsgBox "残念! " & Result & "°小さいです。"
        ElseIf Result > 0 Then
            Set Wrong = DrawShape(msoThemeColorAccent2)
                Wrong.Adjustments.Item(1) = Answer * -1
            MsgBox "残念! " & Result & "°大きいです。"
        Else
            MsgBox "正解!!"
        End If
End Sub
Private Sub ScrollBar1_Change()
    On Error Resume Next
    If Not Wrong Is Nothing Then Wrong.Delete
    Label1.Caption = "角度:" & ScrollBar1.Value & "°"
    Shape.Adjustments.Item(1) = ScrollBar1.Value * -1
End Sub

結果、このようになった。
f:id:Infoment:20190524231615g:plain

もう少し見直してから、長女に試してもらおう。
明日に続きます。

参考まで。