Miten lasketaan korkeuden tasainen pieneneminen?

Kuvankäsittelijä

Teen yhtä kuvaa Microsoft Paintilla. Lähtökuvion korkeus on 44 px, viimeisen kuvion korkeuden tulee olla 2 px. Näiden kahden koon välillä on 46 kuviota.

Toiveenani olisi korkeuden vähittäinen tippuminen 44 pikselistä 2 pikseliin siten, että välissä olevat 46 kuviota pienenisivät tasaisella (kiihtyvyydellä? / mikä on vastaava termi laskevien arvojen suhteen)? Vähän logaritmisen laskemisen tai Gaussin käyrän pienenemisen tapaan (en ole kovin hyvä matemaattisissa termeissä).

Tuleeko kellään ideoita mieleen, miten nuo voisi laskea? Pahoittelen, jos selitys oli sekava, voin vastata lisäkysymyksiin tarvittaessa.

7

<50

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Kuvankäsittelijä

      PS: Nuo 46 tasaisesti pienenevää kuviota tulisivat yhteen pötköön alueelle, jonka korkeus on 310 px.

      Päällimmäisenä olisi siis 44 px korkuinen neliö, sen alla nuo 46 neliötä, ja alimmaisena 2 px korkuinen neliö.

    • laskee

      välejä on 47, joten laskeuma kullakin välillä on 42/47 pikseliä - pyöristettynä aina kokonaispikseliin, jos et käytä vektorigrafiikkaa.

    • Tulisko näin hyvät:

      //y=44e^(-x^b / (45^b/ln(22)))
      var b = 0.407;
      var f = x=>Math.round(44*Math.exp(-(x**b)/((45**b)/Math.log(22))));
      var a = new Array(46).fill(0).map((_,i)=>f(i));
      console.log(a);

      Tuo on siis Javascript koodia; voit suorittaa sitä selaimen consolissa (joka aukeaa F12:lla) ja vaihdella parametreja. Mutta tuo nykyinen siis tulostaa tällaiset luvut:

      [44, 23, 18, 16, 14, 12, 11, 10, 10, 9, 8, 8, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2]

      Olisko sopivat?

      • Tajusin juuri, että tuon funktion f voi sieventää muotoon

        f(x) = 44*(1/22)^(x/45)^b

        Vakiota b vaihtelemalla saa eri muotoisia, mutta arvelin kun puhuit että korkeutta olisi 310px varattuna koko tornille, niin varmaan haluat niiden summautuvat tuohon arvoon ja näin käy b:n arvolla 0.407.


      • minkkilaukku kirjoitti:

        Tajusin juuri, että tuon funktion f voi sieventää muotoon

        f(x) = 44*(1/22)^(x/45)^b

        Vakiota b vaihtelemalla saa eri muotoisia, mutta arvelin kun puhuit että korkeutta olisi 310px varattuna koko tornille, niin varmaan haluat niiden summautuvat tuohon arvoon ja näin käy b:n arvolla 0.407.

        Vai meneekö ne päällekkäin?
        No tässä vielä arvolla b=2 saatavat luvut:

        [44, 44, 44, 43, 43, 42, 42, 41, 40, 39, 38, 37, 35, 34, 33, 31, 30, 28, 27, 25, 24, 22, 21, 20, 18, 17, 16, 14, 13, 12, 11, 10, 9, 8, 8, 7, 6, 5, 5, 4, 4, 3, 3, 3, 2, 2]

        Sievennetty koodi on

        var b = 2;
        var f = x=>Math.round(44*(1/22)**(((x/45)**b)));
        var a = new Array(46).fill(0).map((_,i)=>f(i));
        console.log(a);

        Kopioi tuo konsoliin ja muuta b:n arvoa ja paina enter, niin se tulostaa luvut.


      • Kuvankäsittelijä

        Joo, tuo 30.12.2018 11:08 lähettämäsi kaava vastasi ainakin pikatarkastelulla sitä, millaista olin hakemassa.

        Kiitos avusta ja vinkeistä vastaisuuden varalle!


    • Jos sä ihan perus paraabelia haluat käyttää niin voit selvittää kaavan vaikka Wolfram Alphalla:

      https://www.wolframalpha.com

      syöttämällä

      interpolating polynomial( (0, 44) , (22, b), (45, 2) )

      Tässä siis tuota keskimmäistä pistettä varioimalla saadaan erilaisia. Siis b:n arvo tarkoittaa minkä kokoinen keskimmäinen neliö on ja sitten neliöt asettuvat paraabelille.

      Sehän antaa kaavan:

      -(b x^2)/506 (45 b x)/506 (16 x^2)/345 - (1042 x)/345 44

      Esim, jos b=30, niin:

      -(49 x^2)/3795 - (1337 x)/3795 44

      ja saadaan pisteet
      [44, 44, 43, 43, 42, 42, 41, 41, 40, 40, 39, 39, 38, 37, 37, 36, 35, 34, 33, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 18, 17, 16, 15, 13, 12, 11, 9, 8, 6, 5, 4, 2]

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Kadonnut poika hukkunut lietteeseen mitä kalajoella nyt on?

      Jätelautta ajautunut merelle ja lapsi uponnut jätelautan alle?
      Kalajoki
      86
      3579
    2. Joku hukkui Hyrynsalmella?

      Oliko mökkiläinen taas?
      Hyrynsalmi
      25
      2046
    3. Mitä sinä mietit

      Mies?
      Ikävä
      195
      1971
    4. Kalajoen hukkuneet pojat olivat tummaihoisia

      Jälleen kerran, hukkuneet tai heikon uimataidon vuoksi vaaraan joutuneet olivat muita kuin suomalaisia. Turha viisastell
      Maailman menoa
      87
      1404
    5. PoIiisi jahtasi mopopojan hengiltä

      Toivottavasti on   s  i  n  i  v  u  o  k  k  o    nyt ylpeä itsestään, kun ajatti teinin päin lyhtypylvästä. https://w
      Maailman menoa
      343
      1394
    6. Emme voi elää velaksi, sanoi Riikka

      Valtionvelan odotetaan nousevan 86,3 prosenttiin bruttokansantuotteesta vielä kuluvan vuoden aikana. https://www.iltale
      Perussuomalaiset
      89
      1147
    7. Varoitus kyläläisille Suomussalmella

      Paikkakunnalla on ilmennyt huolestuttavaa toimintaa jossa kaksi aikuista miestä ( Dimitri ja Teemu ) on syyllistynyt nuo
      Suomussalmi
      13
      1014
    8. Sinä eräs, pyydän......

      AUTA mua ole kiltti. Ei mun takia vaan.... Miten saan sut kiinni?
      Ikävä
      84
      1001
    9. Et halua kohdata niitä tunteita ja asioita, joita minä herätän sisälläsi

      Vastustelet. Yrität esittää, että kaikki on hyvin. Leikit perhettä.
      Tunteet
      28
      908
    10. Miksi epäilit kaivattusi kiinnostuneen

      Juuri sinusta? Mihin piirteisiin hän aikanaan saattoi sinussa ihastua? Olivatko ne yhtään samoja asioita joihin itse iha
      Ikävä
      64
      839
    Aihe