Newsgroup: it.comp.lang.visual-basic
Titolo: Ellisse con assi ruotati

Qualcuno sa come disegnare quanto in oggetto?
Direttamente da VB o per mezzo di qualche API.
Grazie.
Skysurfer

 ha scritto nel messaggio
news:9f2dqu$mtc$1...@serv1.iunet.it...

Già chiesto, post vecchi
Ciao
--
Timothy Redaelli
timothy.redae...@email.it
------------------------------------------------------------------
Togliere NONSPAMMARE per rispondere

Skysurfer:
  ti allego due routines per tracciare ellissi con assi ruotati
e spostati rispetto all' origine: la prima usa l' equazione
canonica dell' ellisse, la seconda la sua equazione parametrica.
Ciao, e fammi sapere se ti vanno bene.
Franco
Private Sub Ellisse_Can(ByVal Quadro As PictureBox, ByVal a!, ByVal b! _
    , Optional ByVal Rot! = 0!, Optional ByVal Tx! = 0!, Optional ByVal Ty! = 0! _
    , Optional ByVal Rd! = 0.1, Optional ByVal Colore& = vbWhite)
'
'   Quadro: PictureBox di destinazione del disegno.
'   a:      semiasse x (a > 0).
'   b:      semiasse y.
'   Rot:    rotazione in [radianti].
'   Tx:     traslazione in direzione x.
'   Ty:     traslazione in direzione y.
'   Rd:     risoluzione del disegno.
'   Colore: colore del disegno.
'
    Dim x!, y!, x0s!, y0s!, x0i!, y0i!, x1!, y1!
'
    ' Punto di inizio del disegno dell' ellisse:
    Trasforma -a, 0!, Rot, Tx, Ty, x0s, y0s
    x0i = x0s
    y0i = y0s
'
    For x = -a + Rd To a - Rd Step Rd
        y = Sqr(a * a - x * x) * b / a
'
        ' Disegna la meta' superiore dell' ellisse:
        Trasforma x, y, Rot, Tx, Ty, x1, y1
        Quadro.Line (x0s, y0s)-(x1, y1), Colore
        x0s = x1
        y0s = y1
'
        ' Disegna la meta' inferiore dell' ellisse:
        Trasforma x, -y, Rot, Tx, Ty, x1, y1
        Quadro.Line (x0i, y0i)-(x1, y1), Colore
        x0i = x1
        y0i = y1
'
    Next x
'
    ' Chiude la curva del disegno dell' ellisse:
    Trasforma a, 0!, Rot, Tx, Ty, x1, y1
    Quadro.Line -(x1, y1), Colore
    Quadro.Line -(x0s, y0s), Colore
    ' Elimina la mancanza dell' ultimo pixel:
    Quadro.Line -(x1, y1), Colore
'
'
'
End Sub
Private Sub Ellisse_Par(ByVal Quadro As PictureBox, ByVal a!, ByVal b! _
    , Optional ByVal Rot! = 0!, Optional ByVal Tx! = 0!, Optional ByVal Ty! = 0! _
    , Optional ByVal Rd! = 0.1, Optional ByVal Colore& = vbWhite)
'
'   Quadro: PictureBox di destinazione del disegno.
'   a:      semiasse x.
'   b:      semiasse y.
'   Rot:    rotazione in [radianti].
'   Tx:     traslazione in direzione x.
'   Ty:     traslazione in direzione y.
'   Rd:     risoluzione del disegno [Radianti].
'   Colore: colore del disegno.
'
    Dim x!, y!, xT!, yT!, phi!
    Const PI2! = 2 * 3.14159265358979
'
    ' Punto di inizio del disegno dell' ellisse:
    Trasforma a, 0!, Rot, Tx, Ty, xT, yT
    Quadro.PSet (xT, yT), Colore
'
    For phi = Rd To PI2 + Rd Step Rd
        x = a * Cos(phi)
        y = b * Sin(phi)
        Trasforma x, y, Rot, Tx, Ty, xT, yT
        Quadro.Line -(xT, yT), Colore
'
    Next phi
'
'
'
End Sub
Private Sub Trasforma(ByVal x!, ByVal y!, ByVal Rot!, ByVal Tx!, ByVal Ty!, x1!, y1!)
'
'   x, y:   coordinate del punto da trasformare.
'   Rot:    rotazione del punto in [radianti].
'   Tx, Ty: traslazione del punto nelle direzioni x e y.
'   x1, y1: coordinate finali del punto trasformato.
'
    ' Rotazione:
    x1 = x * Cos(Rot) - y * Sin(Rot)
    y1 = x * Sin(Rot) + y * Cos(Rot)
'
    ' Traslazione:
    x1 = x1 + Tx
    y1 = y1 + Ty
'
'
'
End Sub
