[JS] Vuurwerk: Parabolen vinden met een gezamelijk punt

Pagina: 1
Acties:
  • 117 views sinds 30-01-2008
  • Reageer

  • looskuh
  • Registratie: Februari 2000
  • Laatst online: 07-12-2024
Hallo lui.

Ik heb al twee jaar geen wiskunde (A of B ) meer, en zit vast met iets.

Ik ben vuurwerk aan het programmeren, en dat ziet er tot nu toe zo uit:
http://217.120.114.193/looskuh/stuff/vuurwerk/fireworks.html

Jullie zien misschien het probleem. Alle bolletje kruipen gezamelijk langzaam naar één gezamelijke top toe. Een logisch gevolg wanneer je de volgende simpele formule gebruikt voor die parabool:

0.2*(0.5*randomNr*(Xval*Xval)) + 4;

Waarbij het duidelijk moge zijn dat Xval de X-waarde is van het bolletje, en dat randomNr ervoor zorgt dat niet elk bolletje exact hetzelfde doet.

Wat ik nu dus eigenlijk heb, en zoals het niet moet, in een assenstelsel, is het volgende:
Afbeeldingslocatie: http://217.120.114.193/looskuh/stuff/vuurwerk/zomoetieniet.gif

Maar hoe het eigenlijk WEL zou moeten:
Afbeeldingslocatie: http://217.120.114.193/looskuh/stuff/vuurwerk/zomoetiewel.gif

Het rode is het vuurwerkdeeltje.

Zo zouden dus allemaal parabolen door elkaar moeten lopen, maar ze moeten allemaal een gezamelijk punt hebben, waar de "explosie" uit zou moeten ontstaan.
Ik hoop dat het tot zover duidelijk is.

Nu is dus mijn vraag: Hoe vind ik mbv javascript, of welke taal dan ook, een set functies die allen ten minste 1 gezamelijk punt hebben, dat niet de top is, zoals op het tweede plaatje.

Volgens mij een behoorlijk pittige, maar hopelijk weet iemand 't.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

pfff... da's een tijd geleden...

een parabool: f(x) = -ax2 + bx + c, waarbij c de horizontale verschuiving is, en b de verticale, en a een factor die de stijlheid van de parabool bepaalt.

Die verschuiving is ten opzichte van (0,0) ofcourse :) Kijk maar na, wat er uit f(x) = -x2 komt :)

edit:
never mind, ik lees niet goed...

[ Voor 7% gewijzigd door drm op 18-12-2002 16:09 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

Misschien denk ik veel te simpel, maar als ik naar je 2e plaatje kijk (+tekst) dan wil je dus dat al die funkties dat gemeenschappelijke punt hebben.

Schuif die parabolen nou eens zo, dat dat getekende snijpunt op 0,0 ligt. Volgens mij rekent dat een stuk makkelijker. Je hoeft dan alleen maar voor jouw willekeurig gegenereerde funkties na te gaan of

code:
1
f(0) = 0


waar is. Mis ik hier iets ?

edit:
En mocht je dan dat snijpunt ergens anders in je eigen assenstelsel willen hebben, dan zoek je eerst de funkties op bovenstaande manier. Daarna doe je bij elke funktie +4 erbij (als je hem naar (0,4) wilt verplaatsen)

[ Voor 22% gewijzigd door Skinny op 18-12-2002 16:52 ]

SIZE does matter.
"You're go at throttle up!"


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:51

Janoz

Moderator Devschuur®

!litemod

Ik kan het btw niet zien (mozilla), maar weet je zeker dat je een set formules van parabolen wilt hebben met een gemeenschappelijk snijpunt? Er zijn namelijk betere methoden (wel met parabolen) om vuurwerk te maken. Zoals je het nu hebt zou het in principe ook mogelijk zijn dat je alleen een poot van de parabool te pakken hebt (dat ie dus niet meer door de top hoeft zeg maar).

Mooiste is misschien wel om de valversnelling toe te passen. In principe maak je hiermee ook een parabool, maar kun je het heel simpel in stappen doen. Elk deeltje heeft een richting en een snelheid (opgeslagen in 1 vector. lengte is snelheid, richting is richting) Door hier elk 'frame' de valversnelling bij op te tellen krijg je een keurige parabool... Maar ik moet nu naar huis.. Mischien tik ik vanavond wel ff wat meer :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Janoz schreef op 18 December 2002 @ 16:57:
Mooiste is misschien wel om de valversnelling toe te passen. In principe maak je hiermee ook een parabool, maar kun je het heel simpel in stappen doen. Elk deeltje heeft een richting en een snelheid (opgeslagen in 1 vector. lengte is snelheid, richting is richting) Door hier elk 'frame' de valversnelling bij op te tellen krijg je een keurige parabool... Maar ik moet nu naar huis.. Mischien tik ik vanavond wel ff wat meer :)
Klinkt goed, een soort moleculaire simulatie _/-\o_ Stoer hoor ;)

Wat TS ook kan doen:

1. Kies een punt van oorsprong (x, y)
2. Kies voor elke deeltje i een min of meer random locatie voor de top van de parabool (xi, yi)
3. Los voor elk deeltje het volgende stelsel van vergelijkingen op:

code:
1
2
3
-ai x^2  +  bi x  + ci = y   (parabool gaat door punt van oorsprong)
-ai xi^2 +  bi xi + ci = yi  (parabool gaat door random ander punt)
         -2 ai xi + bi = 0   (dat random andere punt is de top van de parabool)


Tada, nu heb je je set vergelijkingen

[ Voor 3% gewijzigd door RickN op 18-12-2002 18:07 ]

He who knows only his own side of the case knows little of that.


  • looskuh
  • Registratie: Februari 2000
  • Laatst online: 07-12-2024
Dat van Janoz klinkt inderdaad interessant, maar ik zie nog niet hoe dat mijn originele probleem oplost. Mede waarschijnlijk ook omdat ik natuurkunde vroeg heb laten vallen, en niet voor niets ooit ben blijven zitten op Wiskunde B :).

Die van RickN zal ik eens uitproberen. Maar dat zal wederom geen zachtgekookt eitje voor me zijn. Nouja, 't is de uitdaging he? :)

Maar hoe denken jullie eigenlijk dat deze in elkaar zou zitten:
http://doody36.home.attbi.com/liberty.htm

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op het moment dat je het punt waar de parabolen allemaal doorheen moeten gaan op de x-as legt, wordt het geheel wat simpeler:

y= (x-random1)*(x-vastpunt)*random2

Al deze parabolen gaan door (vastpunt,0)
Kies voor vastpunt (0,0) dan wordt het nog simpeler:

y= (x-random1)*x*random2


Random 1&2 zorgen voor de nodige variatie

Desnoods transleer je alles naar een ander assenstelsel door beide x-en te vervangen door (x'-a) en y door (y'-b), dan heb je alles met een vector (a,b) opgeschoven.
Uiteindelijk wordt het dan

y'-b=(x'-a-random1)*(x-a)*random2
of (vervang direct -a-random1 door random1'

y'=(x'-random1')*(x-a)*random2+b

Dit zou 'm dan moeten zijn.
Kies a en b vast
random1' en random 2 zorgen voor de variatie

Suc6

  • looskuh
  • Registratie: Februari 2000
  • Laatst online: 07-12-2024
Ja, maar dit gezamelijk punt blijft dan nog steeds de top, of niet? Dat dacht ik iig, en na het even geprobeerd te hebben leek het hier ook wel op ja :).

Maar ik zat nog eens te pruttelen over die vectoren. Ik zou dus gewoon op een punt kunnen beginnen, ze allemaal 1 richting op kunnen laten bewegen, en vervolgens valversnelling op ze toepassen he? Dat klinkt wel aantrekkelijk eigenlijk.

Misschien dat ik daar eens mee aan de slag kan. Helaas moet ik nu naar college, en heb ik daarna een feestje, dus dat wordt kerst-werk ;).

[ Voor 56% gewijzigd door looskuh op 19-12-2002 12:32 ]


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 17:17
Kun je dit niet oplossen dmv vector-rekenen? Geef ieder punt bij start dezelfde locatie, maar een andere snelheidsvector. Deze is voor het gemak opgesplitst in een x en y snelheid. Als je dan de simulatie in tijdstappen laat verlopen, moet je iedere keer de positie veranderen met de twee snelheden en je moet de y snelheid steeds verlagen. Aanname hierbij is dat het een visueel spektakel moet worden en geen hyper-accurate natuurkundige simulatie :) (Hoewel dit laatste ook nog wel te doen is met deze methode.)
edit:
Bij nader inzien, inderdaad ongeveer zoals Janoz al schreef. :)

[ Voor 7% gewijzigd door DaCoTa op 19-12-2002 14:33 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:51

Janoz

Moderator Devschuur®

!litemod

DaCoTa schreef op 19 december 2002 @ 13:50:
Kun je dit niet oplossen dmv vector-rekenen? Geef ieder punt bij start dezelfde locatie, maar een andere snelheidsvector. Deze is voor het gemak opgesplitst in een x en y snelheid. Als je dan de simulatie in tijdstappen laat verlopen, moet je iedere keer de positie veranderen met de twee snelheden en je moet de y snelheid steeds verlagen. Aanname hierbij is dat het een visueel spektakel moet worden en geen hyper-accurate natuurkundige simulatie :) (Hoewel dit laatste ook nog wel te doen is met deze methode.)


Dus eigenlijk zoiets als ik zei :+

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

looskuh schreef op 19 December 2002 @ 12:29:
Ja, maar dit gezamelijk punt blijft dan nog steeds de top, of niet? Dat dacht ik iig, en na het even geprobeerd te hebben leek het hier ook wel op ja :).

Maar ik zat nog eens te pruttelen over die vectoren. Ik zou dus gewoon op een punt kunnen beginnen, ze allemaal 1 richting op kunnen laten bewegen, en vervolgens valversnelling op ze toepassen he? Dat klinkt wel aantrekkelijk eigenlijk.

Misschien dat ik daar eens mee aan de slag kan. Helaas moet ik nu naar college, en heb ik daarna een feestje, dus dat wordt kerst-werk ;).
Het gezamenlijk punt in mijn oplossing is zeker niet de top. maar een willekeurig ander punt. probeer maar eens echt uit.

Alle parabolen die dezelfde top hebben kan je schrijven als y=random1*(x-a)2+b
Die van mij kan je zeker niet altijd zo omschrijven.

edit:

prog-konijn (hieronder) wat voegt jouw post toe? en BTW het gaat niet over JS

[ Voor 6% gewijzigd door Goodielover op 19-12-2002 20:20 . Reden: reactie op volgende post ]


  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26
Wel eindelijk keer iemand die snapt dat je met dit soort vragen over JS wel in P&W moet zijn en niet in W&G. Klasse! :*D

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart

Pagina: 1