直感的な「角度の理解」に向けて ⑤ ~ 差分を視覚化 ~
昨日は角度の大きさを感覚的に習得する為に、クイズ形式のものを作成してみた。
infoment.hatenablog.com
今日は、間違った場合について、「どの程度、正解から離れているか」の度合いを直感的に理解できるような仕掛けに挑戦する。
間違いの度合いを直感的に理解する為には、五感に働きかけるのが良い。今回は、視覚に訴えてみる。具体的には、正しい扇形と間違えた扇形を重ねて、その差が分かるようにしてみる。
まず複数回扇形を作成するので、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
あとは、解答で作成した扇形を描画するだけだ。なお、注意点は以下の通り。
- 指定角度より大きい場合 ⇒ 描画したうえで、最背面に移動する。
- 指定角度より小さい場合 ⇒ 描画して重ねておく。
こうしておかないと、元の扇形が隠れてしまい、差が分からなくなる。
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
結果、このようになった。
もう少し見直してから、長女に試してもらおう。
明日に続きます。
参考まで。