Vue d'Ensemble

Cet article explique comment faire une rotation d'une forme par rapport à un point qui n'est pas son centre dans le langage de programmation Small Basic. Bien que Shapes.Rotate() pivote les formes depuis le centre de la forme.


Programme d'Exemple



Il s'agit d'une simple horloge analogique avec l'aiguille des secondes. Cette aiguille des secondes est un rectangle. Ce rectangle est pivoté pas par son centre. A la ligne 24, ce rectangle est pivoté. Mais après cela, le rectangle est déplacé à une position appropriée à la ligne 28.

1.' Simple Analog Stop Watch (QPR173)
2.gw = 640
3.gh = 480
4.GraphicsWindow.Width = gw
5.GraphicsWindow.Height = gh
6.GraphicsWindow.BackgroundColor = "LightGray"
7.cx = gw / 2
8.cy = gh / 2
9.w = 10
10.l = 180
11.DrawMark()
12.GraphicsWindow.PenWidth = 0
13.GraphicsWindow.BrushColor = "Silver"
14.secondhand = Shapes.AddRectangle(w, l)
15.Shapes.Move(secondhand, cx - w / 2, cy - l + w / 2)
16.t0 = Clock.ElapsedMilliseconds
17.Timer.Interval = 1000 / 24
18.Timer.Tick = OnTick
19.Sub OnTick
20.  t1 = Clock.ElapsedMilliseconds
21.  sec = (t1 - t0) / 1000
22.  GraphicsWindow.Title = sec
23.  a = sec / 60 * 360
24.  Shapes.Rotate(secondhand, a)
25.  rad = Math.GetRadians(a)
26.  x = cx + ((l - w) / 2) * Math.Sin(rad) - (w / 2)
27.  y = cy - ((l - w) / 2) * Math.Cos(rad) - (l / 2)
28.  Shapes.Move(secondhand, x, y)
29.EndSub
30.Sub DrawMark
31.  GraphicsWindow.BrushColor = "White"
32.  r = l + 3 * w
33.  GraphicsWindow.FillEllipse(cx - r, cy - r, 2 * r, 2 * r)
34.  GraphicsWindow.BrushColor = "Black"
35.  For a = 0 To 11 / 12 * 360 Step 360 / 12
36.    rad = Math.GetRadians(a)
37.    x = cx + (l + w) * Math.Sin(rad) - 5
38.    y = cy - (l + w) * Math.Cos(rad) - 5
39.    GraphicsWindow.FillEllipse(x, y, 10, 10)
40.  EndFor
41.EndSub

Où Déplacer

Donc, le plus important est l'endroit où déplacer le rectangle. L'image qui suit montre le rectangle avant la rotation.

Si vous voulez pivoter ce rectangle depuis le centre de rotation (point rouge), vous devez déplacer le rectangle comme la flèche verte le montre dans l'image qui suit.

La nouvelle position est calculée depuis (1) le centre de rotation + (2) l'offset du centre de rotation vers le nouveau centre de la forme + (3) l'offset depuis le nouveau centre de la forme vers le nouveau coin supérieur gauche (position) du rectangle. Vous trouvez cette expression dans les lignes 26 et 27 du programme précédent.


Voir Aussi

 

Autres Langues