Kirjoittaja: sooda
Kirjoitettu: 08.05.2004 – 08.05.2004
Tagit: grafiikka, koodi näytille, sovellus, vinkki
Lävistäjälelu! :)
Piirtää säännöllisen monikulmion ja sille kaikki mahdolliset lävistäjät. Idea tästä tuli matikan tunnilla kun kateltiin kaverin kanssa jotain lukion kirjaa ja siinä oli tällainen 12-kulmio. Tosi nätti efekti. Klikaa hiirellä niin kulmien määrä vaihtuu.
Niin ja binääri: http://sooda.dy.fi/foo/lelu.exe
'Const EiVärejä = 1 'selkeämpää muttei hieanoja värejä, koklaa epäkommentoida
Private kulmat 'kulmat näkyy joka subissa ettei häviä välillä.
Const pi = 3.14159265358979
Private Sub Form_Load()
AutoRedraw = True 'aina päälle tämä!
ScaleMode = 3 'pixelit
kulmat = 5 'aluksi kulmia on 5kpl oletuksena
piirrä 'piirretään
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then kulmat = kulmat + 1 'vasemmalla napilla lisätään kulmia
If Button = 2 Then kulmat = kulmat - 1 'oikeella napilla vähennetään kulmia
If kulmat = 2 Then kulmat = 3 'minimimäärä kulmille on 3
piirrä 'piirrä uusi lelu
End Sub
Sub piirrä() 'ite piirtojutsku
Cls 'vanha kuva pois
Caption = kulmat 'kerrotaan montako kulmaa on
ReDim kx(kulmat), ky(kulmat) 'kulmakoordinaatit
koko = ScaleWidth 'halkaisija
If ScaleHeight < koko Then koko = ScaleHeight 'halkaisijatarkistus ettei kuva ylity reunojen
koko = koko / 2 'halkaisija säteeksi
For i = 0 To kulmat - 1 'lasketaan kulmien koordinaatit jotta saataisiin säännöllinen monikulmio
kx(i) = koko * Cos(k * pi / 180)
ky(i) = koko * Sin(k * pi / 180)
k = k + 360 / kulmat 'lisätään tietyn verran että pisteiden välit olisi yhtä pitkiä
Next
koko = 255 * 8 / kulmat 'väritysjutsku
For i = 0 To kulmat - 1 'piiretään joka kulmasta viiva
If EiVärejä Then r = 0: g = 0: b = 0 'jos ei värejä niin väri on musta joka viivalla
For j = i + 1 To kulmat - 1 'piirretään viiva joka kulmaan johon ei olla vielä piirretty
Line (ScaleWidth / 2 + kx(i), ScaleHeight / 2 + ky(i))-(ScaleWidth / 2 + kx(j), ScaleHeight / 2 + ky(j)), RGB(r, g, b)
Next
If i + 1 > kulmat - 1 Then 'vika viiva on myös tietyn värinen
'vaikee selittää, kommentoi toi line niin tajuat
Line (ScaleWidth / 2 + kx(0), ScaleHeight / 2 + ky(0))-(ScaleWidth / 2 + kx(kulmat - 1), ScaleHeight / 2 + ky(kulmat - 1)), RGB(r, g, b)
End If
Select Case v \ 255 'mikä värijutsku menossa
Case 0 'siirretään r päin
r = tark(r + koko)
Case 1 'siirretään g päin
r = tark(r - koko)
g = tark(g + koko)
Case 2 'siirretään b päin
g = tark(g - koko)
b = tark(b + koko)
Case 3 'siirretään rg päin
b = tark(b - koko)
r = tark(r + koko)
g = tark(g + koko)
Case 4 'siirretään gb päin
r = tark(r - koko)
b = tark(b + koko)
Case 5 'siirretään rb päin
r = tark(r + koko)
g = tark(g - koko)
Case 6 'siirretään rgb päin
g = tark(g + koko)
Case 7 'siirretään tyhjyyttä päin
r = tark(r - koko)
g = tark(g - koko)
b = tark(b - koko)
End Select
v = v + koko 'lisätään värilaskuria
Next
End Sub
Function tark(mikä) 'värin tarkistus ettei mene yli reunojen
If mikä < 0 Then
tark = 0
ElseIf mikä > 255 Then
tark = 255
Else
tark = mikä
End If
End FunctionJoo, lelu on, pääsin 200 kun hidas kone alko tökkimään ;)
Hieno kuvio tulee kun päääsee 250:meneen ;)
Hieno on! Väsäilin tuollaista kerran QB:llä vanhalla 486:lla. Ei ollut parempaa konetta käytössä ja halusin tutkia fiitä, joka on siis 1.618033889... tai jotain sinne päin, eli siis viisikulmion lävistäjän ja sivun pituuksien suhde. Niin tein sitten tuon tapaisen, ja laskin sitten pisteistä pythagoraan lauseella, onko niiden etäisyys fii ja olihan. Jos tiedät jotain noista jutuista, sooda, mitä selitin, niin voisit lisätä tuohon lävistäjien pituuksien laskemisen ja näyttämisen.
Tulee muuten tosi hieno sateenkaariefekti, kun pistää lävistäjiä niin, että täyttää koko kuvion. Innostuin samaan omallakin ohjelmalla, mutta 486:n piirtäminen oli aivan tuskastuttavan hidas, ja näin monella värillä tuo onkin paljon hienompi.
350 kohdilla rupes vähän hihastumaan..
Aika komea. Hidastuu kolmea sataa lähestyttäessä.
Hää, hitaat koneet :P mulla meni 531 ja sitte.. :D (Pentium 4 2.81 GHz)
130 ja menee hitaaksi :/, mutta erittäin hieno ;)
300 nii menee joku ½ sek piirtää.. ei jaksa rämpyttää enempää :)
testi
Ihan hieno
Seitsemänsadan kohdalla on jo kaunista jälkeä mutta piirtämiseen menee aikaa melko pitkään.
Hieno, 300:ssa kesti jo lähes sekunti, että kuva päivittyy 891 MHz ;D.
mulla ku nous yli 60 kulmaan ni ½ sekuntia kesti että otsikko päivittyi kun naksuttelin koko ajan hiirtä ja vasta ku otsikon kasvu loppui ni uusi kuva piirtyi (koneessa 2.4 GHz celeron ja joku intelin integroitu näytönohjain ja kannettava on)
Miten sais sellasen et piirtelis noit itekseen ilman et tarvii klikkailla? ja mul o VB6