Newsgroup: it.comp.lang.visual-basic
Titolo: vi prego aiutatemi!!!

Devo fare per questa settimana una ricerca sui frattali. Devo come dire
spiegare il programma Ultra fractal. qualcuno sa come usarlo o dove posso
tovare una guida?
mi servirebbe capire poi come si fa un frattale con fractint...
grazie a tutti
Luca

 ha scritto nel messaggio
news:96bi7v$hi0$1...@fe1.cs.interbusiness.it...


 Il VB con i frattali? E' ridicolo!
perche' ridicolo?  Il VB e' un ottimo linguaggio per la
generazione di immagini frattali.  Ho giusto rivisitato
un mio vecchio programma in QBasic facendone un progetto
in VB: se vuoi te ne mando una copia cosi' puoi giudicare
da solo.
Forse non era l' NG giusto per chiedere informazioni su
FractInt o UltraFractal ma il thread (leggermente OT) degli
ultimi giorni poteva giustificare la domanda.
Ciao e fammi sapere.
Franco



Correzione: i frattali con VB... e' ridicolo!

 ha scritto

gia'. gli ho fatto riempire un picbox 100*300 con pset e ci mette una vita.
perche' ?

una vita. perche' ?
devi lavorare il più possibile direttamente in memoria, settando i pixel 
con funzioni matematiche e non grafiche, e ad elaborazione completata 
riversare la bitmap sul DC che vuoi usare, tutta in una volta, e lasciar 
fare il lavoro del disegnare i singoli pixel al driver video primario
una bitmap in fondo è un array unidimensionale (è l'header a darle 
bidimensionalità) di record, con i record, mi pare, in questa forma:
Type RGB
    	Red As Byte
    	Green As Byte
    	Blue As Byte
    	Alpha As Byte
End Type
ignoro se VB si possa correttamente interfacciare alla GDI, dato che si 
dovrebbe, credo, passare la bitmap come puntatore ad array, ma la 
fantomatica e tanto favoleggiata ArrPtr(), ahimè, non esiste
la procedura (un certo xaero di icpw32 ti saprà spiegare molto meglio se 
non altro il procedimento - riguardo alla realizzazione, lui al momento 
ci sta lavorando con VC++, ma anche con VB se la cavava) consiste nel 
far allocare la bitmap alla GDI di Windows, manipolarla fintantochè è un 
semplice array di record - e qui la vedo grigia perchè VB i record e i 
puntatori non li ha mai digeriti molto bene - poi passarla alle funzioni 
di disegno
-- 
January 15, 2028 - Intel announces their new 400THz processor, which 
performs 100 billion floating-point operations in the millisecond before 
it consumes itself in a nuclear explosion. This is a step up from AMD's 
recent processor which simply fries any nearby user with bolts of plasma 
energy. Hobbyists are already looking into ways to overclock the chip.

 fare il lavoro del disegnare i singoli pixel al driver video primario
giusto. solo che -- a parte che credo sia comunque piu' immediato lavorare
con un picbox -- io, per esempio, ho un modo di pensare abbastanza visivo,
per cui questo metodo cui mi costa molto di piu'. un buon esempio
dell'illusoria facilita' di vb...
la domanda pero' rimane: perche' tappo ci mette 15 minuti a fare un
francobollo, che se per giunta ti scordi l'autoredraw sparisce se per
passare il tempo ti dedichi a un'altra app ?
grazie e ciao, a.

 perche' ?
  potresti provare ad usare l' API SetPixelV
anziche' il metodo .PSet.
Ho provato, su di un Form con una Label, un
CommandButton ed un PictureBox di 100x300 [Pixels]:
Private Sub cmdRiempi_Click()
'
'
    Dim I&, J&, tElab!
'
    Label1 = ""
    tElab = Timer
'
    For I = 0 To 100
        For J = 0 To 300
            SetPixelV Picture1.hDC, I, J, vbRed
        Next J
    Next I
    Picture1.Refresh
'
    Label1 = Timer - tElab
'
'
'
End Sub
ed il tempo necessario al riempimento e' stato di 0.22 [s]
(0.23 [s] con .AutoRedraw = True):
questo con un PII a 355 [MHz].
La dichiarazione di SetPixelV e':
Private Declare Function SetPixelV Lib "gdi32" (ByVal hDC As Long _
, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
Come alternativa puoi scrivere i colori dei tuoi Pixels
su di una matrice e poi trasferirli tutti insieme con:
        MoveMemory ....
all' indirizzo lpBits che avrai ottenuto con:
        R1 = GetDIBits(hDC_Mem, PBSrc.Picture, 0 _
        , PB_Height, ByVal lpBits, bi, DIB_RGB_COLORS)
(le istruzioni sopra citate sono copiate al volo da
pezzi di programma e quindi solo indicative...)
Questo sistema e' un po' piu' complicato e dovrei provare
ad implementarlo in pratica: se sei interessato fammelo sapere
che, tempo permettendo, ci provo.
Per ora ciao e a risentirci.
Franco

 "decenti"...
Usando le API, anziche' il metodo .PSet, il tempo
maggiore lo si perde proprio elaborando l' immagine,
specialmente quando si usano molte iterazioni della
sequenza (per vedere i dettagli ai confini dello
insieme).
I tempi, per calcolare e disegnare l' immagine
su di un PictureBox di 410x352 [Pixels] (144320
punti di calcolo), sono:
 
su PC Dell notebook PII 355 [MHz]:
- Mandelbrot completo con Max. 48 iterazioni 6.7 [s].
- 48 iterazioni per ogni punto della vista 14.9 [s].
- minimo, per colorare tutti i punti con poche
  iterazioni 3.1 [s].
 
su PIII 500 [MHz]:
- Mandelbrot completo con Max. 48 iterazioni 6.2 [s].
- 48 iterazioni per ogni punto della vista 11.5 [s].
- minimo, per colorare tutti i punti con poche
  iterazioni 3.6 [s].
L' immagine viene disegnata con l' API SetPixelV() con
un .Refresh ed un DoEvents ad ogni riga (fa' perdere tempo
ma si vede l' immagine crescere in maniera continua e si
possono gestire gli altri eventi).
Puoi comunque, se ne hai voglia, scaricarti il progetto
  FracZn2C da:  
http://members.xoom.it/flanguasco/
Non l' ho ancora completato con tutto quello che
vorrei ma ne ho anticipato la pubblicazione proprio
per darti modo di vedere personalmente.
Ciao, grazie del divertimento che mi stai procurando
e a risentirci.
Franco