Kirjoittaja: sooda
Kirjoitettu: 09.05.2004 – 19.04.2013
Tagit: matematiikka, koodi näytille, vinkki
Laskee fiin(tai mikä se on, se kultainen leikkaus -arvo) ja pyörittelee säännöllistä viisikulmiota jonka sisällä on säännöllinen viisisakarainen tähti. Idea tähän tuli vinkistäni https://www.ohjelmointiputka.net/koodivinkit/24326-vb6-lävistäjäleikki Hunajavohvelin kommentista. Tätä vähän soveltamalla saa tuon ite lävistäjälelunkin pyörimään :P
Alla olevassa viestissä linkki ei toimi. Binääri: http://sooda.dy.fi/foo/fii.exe
normaali versio
Private Sub Form_Click() End 'lopetus helpompaa End Sub Private Sub Form_Load() pi = 4 * Atn(1) 'radiaaneiksi laskemista varten lasketaan pii AutoRedraw = True 'aina päälle tämä! ScaleMode = 3 'pixelit Show 'esiin Dim kx(4), ky(4) 'kulmacoordit Do 'pyöritetään DoEvents 'ettei tilttaa Cls 'vanha kuva pois koko = ScaleWidth 'halkaisija If ScaleHeight < koko Then koko = ScaleHeight 'halkaisija sopivaksi koko = koko / 2 'säteeksi a = (a + 1) Mod 360 'pyöritysjuttu k = a 'aloituskohta kehällä vaihtelee a:n mukaan For i = 0 To 4 'lasketaan kulmat kx(i) = koko * Cos(k * pi / 180) ky(i) = koko * Sin(k * pi / 180) k = k + 360 / 5 Next 'pituudet yks = Sqr((kx(0) - kx(1)) ^ 2 + (ky(0) - ky(1)) ^ 2) kaks = Sqr((kx(0) - kx(2)) ^ 2 + (ky(0) - ky(2)) ^ 2) Caption = "Fii on suunnilleen " & kaks / yks 'ja piirretään ite homma For i = 0 To 4 For j = i + 1 To 4 Line (ScaleWidth / 2 + kx(i), ScaleHeight / 2 + ky(i))-(ScaleWidth / 2 + kx(j), ScaleHeight / 2 + ky(j)) Next Next Loop End Sub Private Sub Form_Unload(Cancel As Integer) End 'muuten ei loppuisi koskaan kun nytkin lopetus lagaa rajusti :D End Sub
saatanallisempi versio
saatanallisempi versio Juhis^ta ja Blazea varten :DD
lisätty 10.05.2004 11:21
tämän binääri: http://sooda.dy.fi/foo/stn_fii.exe
Private Sub Form_Click() End 'lopetus helpompaa End Sub Private Sub Form_Load() pi = 4 * Atn(1) 'radiaaneiksi laskemista varten lasketaan pii AutoRedraw = True 'aina päälle tämä! ScaleMode = 3 'pixelit Show 'esiin Dim kx(4), ky(4) 'kulmacoordit ForeColor = 255 BackColor = 0 DrawWidth = 5 WindowState = 2 Do 'pyöritetään DoEvents 'ettei tilttaa Cls 'vanha kuva pois koko = ScaleWidth 'halkaisija If ScaleHeight < koko Then koko = ScaleHeight 'halkaisija sopivaksi koko = koko / 2 'säteeksi a = (a + 1) Mod 360 'pyöritysjuttu k = a 'aloituskohta kehällä vaihtelee a:n mukaan For i = 0 To 4 'lasketaan kulmat kx(i) = koko * Cos(k * pi / 180) ky(i) = koko * Sin(k * pi / 180) k = k + 360 / 5 Next 'pituudet yks = Sqr((kx(0) - kx(1)) ^ 2 + (ky(0) - ky(1)) ^ 2) kaks = Sqr((kx(0) - kx(2)) ^ 2 + (ky(0) - ky(2)) ^ 2) Caption = "Fii on suunnilleen " & kaks / yks 'ja piirretään ite homma For i = 0 To 4 For j = i + 2 To 4 + (i = 0) Line (ScaleWidth / 2 + kx(i), ScaleHeight / 2 + ky(i))-(ScaleWidth / 2 + kx(j), ScaleHeight / 2 + ky(j)) Next Next Circle (ScaleWidth / 2, ScaleHeight / 2), koko Loop End Sub Private Sub Form_Unload(Cancel As Integer) End 'muuten ei loppuisi koskaan kun nytkin lopetus lagaa rajusti :D End Sub
Hienosti pyörii tuo kulmio. Ja fiikin pysyy samana, vaikka pisteiden paikat vaihtelevat.
Löytyisikö binääriä?
Ainiinjjoo nyt löytyy: http://koti.mbnet.fi/koodaaja/jotaki/fii.exe
Kaskas, me saatananpalvojat löysimme uuden lelun ;)
Fii (engl. phi) on siis Fibonaccin kehittämä luku, joka lasketaan jakamalla Fibonaccin sarjan luku sitä edeltävällä samaan sarjaan kuuluvalla luvulla. Fibonaccin lukusarja alkaa luvuilla 0, 1, 1, 2, 3, 5, 8 jne. ja uusi luku lasketaan edellinen plus sitäedellinen.
...ihan vaan jos joku ei ymmärrä mikä fii on :)
> Kaskas, me saatananpalvojat löysimme uuden lelun ;)
Indeed \m/
Pitänee tehä oma versio, jossa on musta tausta ja punanen viiskulmio...
:P
Juhis^ kirjoitti:
Kaskas, me saatananpalvojat löysimme uuden lelun ;)
Tässä on vaan viisikulmio eikä ympyrää. Voin mä tehdä oikean saatanalelunkin :D
Eikä noiden lukujen välttämättä tartte olla edes fibonaccin sarjaa. Voidaan tempaista mitkä tahansa kaksia lukua ja lähteä laskemaan niistä eteenpäin samalla periaatteella kuin fibonaccin jonoa. Mitä pidemmälle laskee, sitä tarkemmaksi fii tulee. Ja jos joku ei vielä Gwaurinkaan kommentin jälkeen tajunnut laskukaavaa, niin tämä selittänee aika hyvin:
1 + 1 = 2 1 + 2 = 3 2 + 3 = 5 3 + 5 = 8 5 + 8 = 13 8 + 13 = 21 13 + 21 = 34 jne...
Pidin ala-asteella Fibonaccista esitelmän kun jostain historian henkilöstä piti esitelmä tehdä. :P
Eikös se Fibonacci selittänyt tuota samaa jotenkin jänisten määrän lisääntymisellä, vai muistanko ihan väärin? Numeropiru-nimisessä kirjassa on lisää tästä jutusta ja monista muistakin matikan ihmeistä. Kannattaa lukea. Tuossa fiissähän oli vielä sekin, että kun vähennät fiistä puoli ja kerrot sen sitten kahdella ja sitten vielä korotat toiseen potenssiin, saat tasan viisi. Eli selvä yhteys siinä on. Jotkuthan väittää, että mustat aukot pyörii jotenkin tuon fiin mukaan ja kaikkea muutakin... on se kumma luku. :)
Jäniksillä juuri. Ne lisääntyy juuri jotenkin samalla tavalla kuin toi hunajavohvelin ja gwaurin aiempi kaava, eli lasketaan kahden peräkkäisen luvun suhde. Tämä esiintyy myös melkein kaikkialla luonnossa, esim. auringonkukan keskustan siementen järjestäytymismuodossa(?)!!! Hulluuks! Niin ja tarkan arvon tolle saa laskettua (1 + Sqr(5)) / 2, eli melkein hunajavohvelin selitys. Tää on tosi maaginen! Kuulemma antiikin kreikassa kaikki rakennettiin siten että niihin sisältyi suorakulmioita joiden sivun pituuksien suhde on fii.
Hei toi kuvio ekassa versiossa hidastuu kun vie hiiren pois ikkunan luota ja nopeutuu kun vie yläpalkkiin
Hyvän näkönenhän toi... Ala-astelainen ei vain ymmärrä trigonometriasta yhtään mitään :D
muute laskisko tää fibonaccia?
Function LaskeFibonacciMikäLieOlisikaanTälleHyväNimi(Monesko As Integer)As Long Dim vl As Long, sitäedeltävä As Long LaskeFibonacciMikäLieOlisikaanTälleHyväNimi = 1 'alkuarvo If Monesko < 3 Then Exit Function vl = 1: sitäedeltävä = 1 For i = 3 To Monesko LaskeFibonacciMikäLieOlisikaanTälleHyväNimi = vl + sitäedeltävä sitäedeltävä = vl vl = LaskeFibonacciMikäLieOlisikaanTälleHyväNimi Next i End Function
ai niin ja miten ton tähden saa täytettyä? varmaan POINTAPI tyyppi ja API-kutsu Polygon ovat käytössä. ajattelin tehdä cccp-lelun itselleni.
hauskempi muute jos muuttaa piin kaavan 3 * Atn(1)
tai muuten sählää sitä
esim. 5 * Atn(1)
antaa nuolen.
Munpa oli pakko pilata niiden ilo, jotka haluis ite säätää niin että voi vaikuttaa kulmien määrään 8)
Testatkaa jos satutte kattomaan, ite en oo testannu enkä oo aikoihin vb:tä koodiskellu mut pitäis olla oikein. VB:tä ei oo nyt käytettävissä (ainakaan tällä koneella) joten ei myöskään pysty testaamaan. Jos ei toimi niin yksinkertaisilla muutoksilla pystyy halukkaat tekevän toimivan tosta alkuperäisestä :)
Dim kulmat As Integer Private Sub Form_Click() ' End 'lopetus helpompaa ' eihän tarvi sulkea tuosta? kun tälle ois hyvää käyttöä muussakin :P kulmat = Int(InputBox("Jaa montako kulmaa pitäis olla?")) If kulmat < 3 Then MsgBox "Onks noita kulmia nyt liian vähän että saatais monikulmio?", vbYesNo: Form_Click End Sub Private Sub Form_Load() pi = 4 * Atn(1) 'radiaaneiksi laskemista varten lasketaan pii AutoRedraw = True 'aina päälle tämä! ScaleMode = 3 'pixelit Show 'esiin Dim kx(kulmat), ky(kulmat) 'kulmacoordit Do 'pyöritetään DoEvents 'ettei tilttaa Cls 'vanha kuva pois koko = ScaleWidth 'halkaisija If ScaleHeight < koko Then koko = ScaleHeight 'halkaisija sopivaksi koko = koko / 2 'säteeksi a = (a + 1) Mod 360 'pyöritysjuttu k = a 'aloituskohta kehällä vaihtelee a:n mukaan For i = 0 To kulmat 'lasketaan kulmat kx(i) = koko * Cos(k * pi / 180) ky(i) = koko * Sin(k * pi / 180) k = k + 360 / kulmat Next 'pituudet yks = Sqr((kx(0) - kx(1)) ^ 2 + (ky(0) - ky(1)) ^ 2) kaks = Sqr((kx(0) - kx(2)) ^ 2 + (ky(0) - ky(2)) ^ 2) Caption = "Fii on suunnilleen " & kaks / yks 'ja piirretään ite homma For i = 0 To 4 For j = i + 1 To 4 Line (ScaleWidth / 2 + kx(i), ScaleHeight / 2 + ky(i))-(ScaleWidth / 2 + kx(j), ScaleHeight / 2 + ky(j)) Next Next Loop End Sub Private Sub Form_Unload(Cancel As Integer) End 'muuten ei loppuisi koskaan kun nytkin lopetus lagaa rajusti :D End Sub