Newsgroup: it.comp.lang.visual-basic
Titolo: [OT?] Matematica: seguire una circonferenza

Ciao a tutti,
forse sono OT, (ma cmq sto cercando di farlo in VB) ma proprio non riesco a
fare questo:
vorrei sapere come faccio a sapere ogni coordinata di una circonferenza..mi
spiego meglio
praticamente vorrei far ruotare in senso orario e a run-time un cerchio
dentro un picturebox....
ho guardato le funzioni cos e sin ma non ci capisco molto fra radianti,
angoli etc...
qualche luminare in matematica magari mi aiuta perche la trigonometria č
tabů x me!
8P
Grazie
Fabio

 dentro un picturebox....
Non mi e' chiaro cosa intendi per "ruotare".  Forse disegnare
una circonferenza?
Ciao, fammi sapere cosa intendi fare che vedo se sono in grado
di aiutarti.
Franco

dentro un picturebox....
Non so se ho capito cosa vuoi fare (ho gia' fatto abbastanza casino
per oggi :-PPP), prova un po' questo esempio se ti puo' ispirare ;-)
Viene disegnato un cerchio suddiviso a fette colorate che ruota di
10 gradi ogni secondo.
Ti serve un form con dentro un Timer, quindi copia questo codice.
Nota:
La funzione PieSlice non e' mia, ma di Rod Stephens, un tipo che 
con la grafica in VB ci acchiappa parecchio :-)
<codice>
Option Explicit
Private Const PI As Double = 3.
14159265359
Private m_Angles() As Single
Private m_Colours() As Long
Private m_Rotation As Single
Private m_Interval As Integer
Private m_StepDegrees As Single
Private Sub cmdDraw_Click()
    Refresh
End Sub
Private Sub Form_Activate()
    Refresh
End Sub
Private Sub Form_Initialize()
    m_StepDegrees = 10
    m_Interval = 500
End Sub
Private Sub Form_Load()
    ReDim m_Angles(0 To 4)
    m_Angles(0) = 0
    m_Angles(1) = 100
    m_Angles(2) = 135
    m_Angles(3) = 240
    m_Angles(4) = 360
    ReDim m_Colours(0 To 3)
    m_Colours(0) = vbRed
    m_Colours(1) = vbYellow
    m_Colours(2) = vbBlue
    m_Colours(3) = vbGreen
    Timer1.Interval = m_Interval
    Timer1.Enabled = True
    Me.WindowState = vbMaximized
End Sub
Private Sub Form_Paint()
    DrawPie m_Rotation
End Sub
Private Sub Form_Resize()
    Refresh
End Sub
Private Sub DrawPie(ByVal rotationAngle As Single)
    Dim centreX As Single: centreX = ScaleWidth / 2
    Dim centreY As Single: centreY = ScaleHeight / 2
    Dim radius As Single: radius = ScaleHeight / 3
    Dim startAngle As Single, endAngle As Single
 
    Cls
    FillStyle = vbSolid
    ScaleMode = vbPixels
    Dim i As Long
    For i = 0 To UBound(m_Colours)
        startAngle = m_Angles(i) + rotationAngle
        If startAngle >= 360 Then startAngle = startAngle - 360
        endAngle = m_Angles(i + 1) + rotationAngle
        If (endAngle > 360) Then endAngle = endAngle - 360
        fillColor = m_Colours(i)
        ForeColor = m_Colours(i)
        PieSlice Me, centreX, centreY, _
                radius, _
                startAngle * PI / 180, endAngle * PI / 180
    Next i
 
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Erase m_Angles
    Erase m_Colours
End Sub
Private Sub Timer1_Timer()
    If ((m_Rotation - m_StepDegrees) <= 0) Then
        m_Rotation = 360
    Else
        m_Rotation = m_Rotation - m_StepDegrees
    End If
    Me.Caption = m_Rotation
    Refresh
End Sub
' Draw a pie slice.
' by Rod Stephens
Public Sub PieSlice(ByVal obj As Object, ByVal X As Single, ByVal Y As Single, ByVal radius As Single, ByVal start_angle As Single, ByVal end_angle As Single)
    ' Make both angles <= 2 * PI.
    Do While start_angle > 2 * PI
        start_angle = start_angle - 2 * PI
    Loop
    Do While end_angle > 2 * PI
        end_angle = end_angle - 2 * PI
    Loop
    ' Make both angles strictly positive.
    Do While start_angle <= 0
        start_angle = start_angle + 2 * PI
    Loop
    Do While end_angle <= 0
        end_angle = end_angle + 2 * PI
    Loop
    ' Draw the slice
    obj.Circle (X, Y), radius, obj.ForeColor, -start_angle, -end_angle
End Sub
</codice>
-- 
hth, hal
P.S. Non mi dire che non ti funziona, perche' l' ho fatto girare
prima di postarlo ;-)

 ha scritto

secondo me, tipo un disco d'orologio. che lo voglia fare a runtime
estremamente corretto :)
l'esempio di hal funziona che e' una bellezza e senza stroncare la cpu.
in javascript c'e' un html che gira per mail e che alla fine ho messo su
chappi, mouse clock. e' bellissimo, solo che la cpu l'ammazza proprio...
ciao, a.

 ha scritto nel messaggio
news:EsTA8.12781$g04....@tornado.fastwebnet.it...

Grazie a tutti per l'interessamento,
ho risolto, cmq dovevo far girare in senso orario un cerchio.....
praticamente dovevo seguire una circonferenza come se fosse un binario del
mio treno (il cerchio)
ciauz
fabio

 angoli etc...
Se vuoi lumi di trigonometria, sentiamoci in privato
altrimenti questi sono i passi fondamentali per la rotazione
per prima cosa i dati relativi al disegno devono essere globali
poi vanno assegnati i valori specifici del disegno
successivamente va eseguito il disegno in run-time
infine c'è la routine di rotazione vera e propria (l'unica da non
modificare)
Sto preparando un esempio pratico ... lo troverai domani sul mio sito
www.cerretosoft.it/download
sezione "miscellanea"
nome "rotate"
Mauro