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. Minä haluun vaa oikeesti kuulla

      Että sulla on kaikki hyvin. Ihan oikeasti haluan. Ehkä meitä ei sit ollu tarkotettu yhteen, mut oot mulle äärettömän tär
      Ikävä
      88
      2514
    2. Mitä tapahtunut?

      Ken tietää mitä viitostiellä betonin kohilla käynyt punaisen auton kanssa?
      Suomussalmi
      23
      1730
    3. Kenen kanssa haluaisit suhteeseen?

      Laita omasi ja hänen nimensä ensimmäinen kirjain 😊
      Ikävä
      81
      1649
    4. Olisikin se meidän tapaaminen jo liian jännää

      Näin pitkän ajan jälkeen.
      Ikävä
      79
      1624
    5. Valmistaudu syyskuun OrpoPurraan: Hamstraa näitä ennen syyskuuta - Isossa osassa tuotteita hinnat..

      ..ovat kallistumassa, jopa satojen eurojen lovi IL: Hamstraa näitä https://www.iltalehti.fi/kotimaa/a/175f5038-fe22-498
      Maailman menoa
      33
      1541
    6. Eläkeläisiltä leikataan jo asumistukeakin, osalla loppuu kokonaan!

      https://yle.fi/a/74-20102928 Hallitus varmaan vihaa eläkeläisiä, nyt ollaan kajoamassa eläkeläisten asumistukeenkin, os
      Maailman menoa
      359
      1444
    7. Melko hyvin tunnen jo hänet

      Hän ei ole sopiva. Jotain hyvää tässä palstan seuraamisessa on ollut. Omien ajatusten ja tunteiden jäsentämisen lisäksi
      Ikävä
      86
      1209
    8. Hesari tunnustaa että Ukraina on häviämässä sodan - Suomen poliittinen eliitti housut kintuissa

      Oliko aivan pakko sitoutua politiikkaan jossa pumpattiin älyttömät summat rahaa Kankkulan Kaivoon eli Kiovan natseille?
      Maailman menoa
      256
      1162
    9. Ikävöin kyllä

      En voi ottaa nyt yhteyttä, joten puran tänne järjetöntä ikävääni. Tunteeni sinua kohtaan ovat valtaisat.
      Ikävä
      33
      1136
    10. Mies, riittääkö sulle näkemään vilauksen musta?

      Etkö halua ottaa minua kiinni?
      Ikävä
      63
      1119
    Aihe