Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
Option Explicit
Dim aPos(360,2) ' memorizza le coordinate relative ai 360 gradi serve per poter disegnare le corde
Sub Main
Dim nRaggio ' raggio ddel cerchio
Dim cX,cY ' centro del cerchio x e y
Dim Base,Altezza ' dimensioni area disegno
Dim Angolo ' gestisce il ciclo per disegnare il cerchio
Dim pi ' pigreco
Dim x1,y1,x2,y2 ' coordinate generiche pr i segmenti
Dim cLung ' distanza per stampare i gradi
Dim k ' ciclo generico
cLung = 2
pi = 3.14
Base = 150
Altezza = 150
nRaggio = 60
' preimposto le dimensioni dell'area
Call PicSetDimensioni(Base,Altezza,Base,Altezza)
' calcolo il centro del cerchio
cX = Base / 2
cY = Altezza / 2
Call PicCerchio(cX,cY,3)
Call PicRiempi(cX,cY,vbRed)
' ciclo per disegnare i semiraggi
For Angolo = 0 To 360
' calcolo cordinate per il segmento raggio
x1 = cX +((nRaggio) * Cos(- Angolo *(pi / 180)))
y1 = cY +((nRaggio) * Sin(- Angolo *(pi / 180)))
' memorizzo nell'array globale le coordinate appena calcolate
' cosi potranno essere riusate per disegnare le corde
aPos(Angolo,1) = x1
aPos(Angolo,2) = y1
If Angolo Mod 5 = 0 Then
' ogni 5 gradi disegno un semiraggio un po' piu lungo
' e stampo i gradi in corripondenza
If Angolo <> 0 Then
x2 = cX +((nRaggio + cLung*3) * Cos(- Angolo *(pi / 180)))
y2 = cY +((nRaggio + cLung*3) * Sin(- Angolo *(pi / 180)))
Call PicLinea(x1,y1,x2,y2)
x2 = cX +((nRaggio + cLung*4) * Cos(-(Angolo + 2) *(pi / 180)))
y2 = cY +((nRaggio + cLung*4) * Sin(-(Angolo + 2) *(pi / 180)))
Call PicStampaTestoRT(x2,y2,Angolo,Angolo)
End If
Else
' disegno il semiraggio
x2 = cX +((nRaggio + cLung) * Cos(- Angolo *(pi / 180)))
y2 = cY +((nRaggio + cLung) * Sin(- Angolo *(pi / 180)))
Call PicLinea(x1,y1,x2,y2)
End If
Next
' come esempio disegno un poligono di lato 20
For k = 0 To 340 Step 20
Call DisegnaCorda(k,k + 20,vbRed)
Next
' mostro la figura in output
Call PicEsegui
End Sub
Sub DisegnaCorda(p1,p2,colore)
' p1 e p2 sono i gradi a cui si riferiscono inizio e fine della corda
'Call PicLineaTratteggiata(aPos(p1,1),aPos(p1,2),aPos(p2,1),aPos(p2,2),colore)
Call PicLinea(aPos(p1,1),aPos(p1,2),aPos(p2,1),aPos(p2,2),colore)
Call PicPunto(aPos(p1,1),aPos(p1,2),6,colore)
Call PicPunto(aPos(p2,1),aPos(p2,2),6,colore)
End Sub
Option Explicit
Sub Main
ReDim aN(2)
aN(1) = 1
aN(2) = 45
call DisegnaCerchioCiclometrico (aN)
End Sub
quote:Originally posted by LuigiB
scusa esse ti serve proprio in quel modo ?
Perceh senno si potrebbe fare cosi , lo avevi gia visto ?
Codice:Option Explicit Sub Main ReDim aN(2) aN(1) = 1 aN(2) = 45 call DisegnaCerchioCiclometrico (aN) End Sub
Option Explicit
Dim aPos(90,2) ' memorizza le coordinate relative ai 90 numeri
Sub Main
Dim nRaggio ' raggio ddel cerchio
Dim cX,cY ' centro del cerchio x e y
Dim Base,Altezza ' dimensioni area disegno
Dim Angolo ' gestisce il ciclo per disegnare il cerchio
Dim pi ' pigreco
Dim x1,y1,x2,y2 ' coordinate generiche pr i segmenti
Dim cLung ' distanza per stampare i gradi
Dim k ' ciclo generico
Dim n
Dim z
cLung = 2
pi = 3.14
Base = 150
Altezza = 150
nRaggio = 60
' preimposto le dimensioni dell'area
Call PicSetDimensioni(Base,Altezza,Base,Altezza)
' calcolo il centro del cerchio
cX = Base / 2
cY = Altezza / 2
Call PicCerchio(cX,cY, nRaggio )
Angolo = 360
n = 91
' ciclo per disegnare i semiraggi
For z = 90 To 540 Step 4
Angolo = FuoriX( z ,360)
' calcolo cordinate per il segmento raggio
x1 = cX +((nRaggio) * Cos(- Angolo *(pi / 180)))
y1 = cY +((nRaggio) * Sin(- Angolo *(pi / 180)))
' memorizzo nell'array globale le coordinate appena calcolate
' cosi potranno essere riusate per disegnare le corde
n = n -1
aPos(n,1) = x1
aPos(n,2) = y1
If n Mod 10 = 0 Then
' ogni 5 gradi disegno un semiraggio un po' piu lungo
' e stampo i gradi in corripondenza
x2 = cX +((nRaggio + cLung*3) * Cos(- Angolo *(pi / 180)))
y2 = cY +((nRaggio + cLung*3) * Sin(- Angolo *(pi / 180)))
Call PicLinea(x1,y1,x2,y2)
x2 = cX +((nRaggio + cLung*4) * Cos(-(Angolo + 2) *(pi / 180)))
y2 = cY +((nRaggio + cLung*4) * Sin(-(Angolo + 2) *(pi / 180)))
Call PicStampaTestoRT(x2,y2,n,Angolo)
Else
' disegno il semiraggio
x2 = cX +((nRaggio + cLung) * Cos(- Angolo *(pi / 180)))
y2 = cY +((nRaggio + cLung) * Sin(- Angolo *(pi / 180)))
Call PicLinea(x1,y1,x2,y2)
x2 = cX +((nRaggio + cLung) * Cos(-(Angolo + 2) *(pi / 180)))
y2 = cY +((nRaggio + cLung) * Sin(-(Angolo + 2) *(pi / 180)))
Call PicStampaTestoRT(x2,y2,n,Angolo)
End If
If n = 0 Then Exit For
Next
' come esempio disegno un poligono di lato 18
For k = 90 To 1 Step -18
Call DisegnaCorda(k,Fuori90(k - 18),vbRed)
Next
' mostro la figura in output
Call PicEsegui
End Sub
Sub DisegnaCorda(p1,p2,colore)
' p1 e p2 sono i gradi a cui si riferiscono inizio e fine della corda
'Call PicLineaTratteggiata(aPos(p1,1),aPos(p1,2),aPos(p2,1),aPos(p2,2),colore)
Call PicLinea(aPos(p1,1),aPos(p1,2),aPos(p2,1),aPos(p2,2),colore)
Call PicPunto(aPos(p1,1),aPos(p1,2),6,colore)
Call PicPunto(aPos(p2,1),aPos(p2,2),6,colore)
End Sub
Function PicStampaTesto(ByVal x, ByVal y, testo)
x = x - Picture1.TextWidth(testo) / 2
y = y - Picture1.TextHeight(testo) / 2
Picture1.CurrentX = x
Picture1.CurrentY = y
Picture1.Print testo
End Function
Option Explicit
Dim aPos(90, 2) ' memorizza le coordinate relative ai 90 numeri
Sub Test()
Dim nRaggio ' raggio ddel cerchio
Dim cX, cY ' centro del cerchio x e y
Dim Base, Altezza ' dimensioni area disegno
Dim Angolo ' gestisce il ciclo per disegnare il cerchio
Dim pi ' pigreco
Dim x1, y1, x2, y2 ' coordinate generiche pr i segmenti
Dim cLung ' distanza per stampare i gradi
Dim k ' ciclo generico
Dim N
Dim z
cLung = 2
pi = 3.14
Base = 150
Altezza = 150
nRaggio = 60
' preimposto le dimensioni dell'area
Call PicSetDimensioni(Base, Altezza, Base, Altezza)
' calcolo il centro del cerchio
cX = Base / 2
cY = Altezza / 2
Call PicCerchio(cX, cY, nRaggio)
Angolo = 360
N = 91
' ciclo per disegnare i semiraggi
For z = 90 To 540 Step 4
Angolo = FuoriX(z, 360)
' calcolo cordinate per il segmento raggio
x1 = cX + ((nRaggio) * Cos(-Angolo * (pi / 180)))
y1 = cY + ((nRaggio) * Sin(-Angolo * (pi / 180)))
' memorizzo nell'array globale le coordinate ap
Favoloso anzi direi Grandioso
grazie Luigi per il codice VB. E ti ringrazio sopratutto per la
spiegazione molto chiara. Mi hai fatto capire lo sbaglio.
Non voglio ripetermi, era questo il punto che no riuscivo a capire
a pensarlo mi veniva facile. ma quando modificavo il codice lo sbagliavo.
dopo inviato l'ultimo post avevo provato anche con
currentX e Y
e print n
ma come da te citato, ancora non tutti numeri venivano scritti al posto giusto.
Mi sono aiutato anche con codici sorgente trovati in giro su google.
siti appositamente per vb6. esempi di orologi analogici, simulatori di radar.
ecc tutto quello che disegnava il cerchio e aveva a che fare con coordinate.
E per finire avevo trovato anche quello che cercavo un cerchio diviso in 90 parti.
Ma nessun codice sorgente mi ha aiutato a farmi capire come ordinare i numeri
in modo corretto.Perchè.
L'orologio usava un'immagine sovrapposta (come ho fatto anch'io)
il Radar e il cerchio ciclometrico, scrivevano si i numeri (attorno) , ma non disposti
ordinatamente. I numeri sulla sinistra Guardando il monitor erano spostati verso il centro.
Comunque ritornando sul tuo Codice sorgente,
erano queste le due righe che bisognava ritoccare.
x = x - Picture1.TextWidth(testo) / 2
y = y - Picture1.TextHeight(testo) / 2
anzi per meglio dire
- Picture1.TextWidth(testo) / 2
- Picture1.TextHeight(testo) / 2
e bisognava (sopratutto) pensare ai numeri che vengono sempre scritti a partire
da sinistra verso destra.
Grandioso Luigi.
Ti ringrazio nuovamente con stima esselotto