Toon posts:

[flash] draggen van object binnen een ruitvorm *

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik weet het.. de titel is misschien vaag, maar weet ook niet hoe ik het moet noemen ;)

maar allereerst dit:
ik heb zo goed als geen ervaring met flash, maar werk er nu toch mee :P

maar ik zit dus met het volgende:
ik heb een driehoek met daarin een soort cursor.. deze (blauwe) cursor is versleepbaar binnen deze driehoek, maar dit slepen moet aan een paar voorwaarden voldoen:

op elke as van de driehoek komt een minimale en een maximale waarde.. de zwarte lijnen die aan de versleepbare cursor vastzitten (zie voorbeeld), mogen dus alleen versleepbaar zijn binnen deze 2 waarden.. dit geldt dan dus voor elke as en zo creëer je een ruitvormig vlak binnen het driehoek..

het lukt me dus wel om te draggen binnen een rechthoek, maar zou dus niet weten hoe dit moet bij een ruitvorm.

mijn vraag is nu:
is dit mogelijk en zo ja, is het dan ook mogelijk om waarden aan de assen toe te kennen, zodat je per stand van de cursor de bijbehorende waarden aan de drie assen kan berekenen???

edit:
Helaas kan ik op dit moment nix uploaden, dus een voorbeeldplaatje volgt nog...

[ Voor 5% gewijzigd door Verwijderd op 22-03-2004 13:38 ]


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ben wel benieuwd naar het voorbeeldje, zou graag zien hoe je met 3 lijnen (3-assen op een driehoek) een vierhoekige ruitvorm maakt ;).

maar ongeacht het aantal zijden van een vlak, kun je natuurlijk zonder al te veel problemen testen of een willekeurig punt binnen het vlak ligt.

een collega van me heeft er laatst een functie voor geschreven in Director-Lingo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
on pointInTriangle p, a,b,c 
  if sameSide(p,a, b,c) and sameSide(p,b,a,c) and sameSide(p,c,a,b) then
    return true
  else
    return false
  end if
end
on sameSide p1,p2, a,b 
  cp1 = CrossProduct(vec(b-a), vec(p1-a))
  cp2 = CrossProduct(vec(b-a), vec(p2-a))
  if DotProduct(cp1, cp2)>=0 then
    return true
  else
    return false
  end if
end
on vec p
  return vector(p[1],p[2],0)
end

Ff omzetten naar AS dus :P. Cross-/Dotproduct zul je even zelf een Javascript-versie van moeten schrijven, maar zo moeilijk is dat niet (ook bekend als in- en uitproduct).

Verwijderd

Topicstarter
Hier is alsnog even een linkje naar het voorbeeld.. de fla staat er ook bij voor geïnteresseerden ;)

http://www.hetoliedom.nl/arjan/driehoek/driehoek.html

Verwijderd

in het algemeen moet ie dus in die 6hoek blijven neem ik aan?
da's gewoon even wat wiskunde pielen. stel formules op voor de lijnen, en
kijk voor de x of die hoger is dan de lijn voor bmin, fmin en rmin en lager dan bmax, fmax en rmax
voor de y hoger dan rmax en fmin en lager dan rmin en fmax

het is overigens een beetje onzin om dit op deze manier neer te zetten omdat als je de framerate en de resolutie hebt gekozen de bitrate vastligt (logisch) je zou dus kunnen volstaan met een normaal rechthoekig assenstelsel voor bijvoorbeeld de resolutie en de framerate (dan heb je een rechthoek voor die constraints) en eventueel de constraint van de bitrate nog extra controleren (die in dit voorbeeld toch buiten die rechthoek vallen, dus niet nodig. Als jouw 6hoek altijd een ruit is als deze hoef je dus helemaal niet te controleren op de constraints voor de bitrate)

nadeel is wel dat het er niet zo sjiek uitziet, maar waarschijnlijk wel makkelijker te interpreteren

[ Voor 55% gewijzigd door Verwijderd op 22-03-2004 19:11 ]


Verwijderd

Topicstarter
ik zie niet precies waar jij een 6hoek ziet.. hij moet juist binnen de donkergrijze ruit blijven en dat is dus een vierhoek..

en de cursor mag dus niet boven de schuine lijn van Rmin naar Fmin en die van Fmax naar Rmax komen.. ditzelfde geldt voor de schuine ondergrenzen.. dus er is geen sprake van een vaste y-hoogte.. de x-waarden zijn wel mnakkelijk vast te stellen..

offtopic:
en hoezo ligt de bitrate vast op het moment dat je de framerate en resolutie gekozen hebt???

je kan best met dezelfde resolutie en framerate een andere bitrate kiezen... alleen wordt het plaatje anders, maar dat staat terzijde..

Verwijderd

als bmin en bmax groter resp. kleiner worden dan nu aangegeven wordt het een 6hoek omdat je daar dan ook binnen moet blijven

als ik een resolutie kies en een framerate, dan kan ik lijnen trekken vanuit die punten en die snijden mekaar ergens op een vastgelegde bitrate, dus lijkt me die variabele daardoor vastgelegd, daardoor heb je die hele driehoek dus eigenlijk niet nodig en heb je aan een vierkant genoeg omdat je dus maar 2 onafhankelijke variabelen hebt.

Maar met de code van Genoil moet je er toch wel kunnen komen? (note: uitproduct == crossproduct; inproduct==dotproduct) je kan hiermee checken of je punt binnen een willekeurige veelhoek (opgebouwd door lijnen) ligt. Wat zijn nu je concrete problemen nog?

[ Voor 5% gewijzigd door Verwijderd op 22-03-2004 20:26 ]


Verwijderd

Topicstarter
euhm.. met de code van Genoil ga ik aan de slag.. even mijn wiskundige kennis over vectoralgebra ophalen :P

enne.. sorry, maar die 6hoek snap ik nog steeds niet.. het idee is juist dat je met de cusor sleept binnen de donkergrijze ruit.. toegepast op dit onderwerp betekent dat je uitgaat van een bepaalde bitrate en door de vaste hoek, de 2 bijpassende waarden van de resolutie en de framerate krijgt te zien.. de echte waarde worden dan later nog berekend door een formuletje...

dus ik zie dan eigenlijk de 6hoek niet.. maar ik zal er nog eens mee bezig gaan.. misschien kom ik tot verder inzichten :D

  • tie-rep
  • Registratie: Oktober 2001
  • Laatst online: 19-02 15:56

tie-rep

nu met ir. !

dit is dus echt een raar figuur!

wat je doet, is eerst een grafiek maken met 3 assen en daarbinnen ga je zitten knoeien totdat er een ruit ontstaat....

Zoals al eerder gezegd, moet je idd een 6 hoek overhouden.
Dus trek op die onderste as, ipv de huidige min/max lijnen, de lijnen net zo consequent als de andere 2. Dan zie je dus een ....

idd 6 hoek :)

Afbeeldingslocatie: http://members.lycos.nl/pieter/_dump/driehoek.gif
zo dus :)

Verschillende aanpakken mogelijk.
Ik denk dat ik voor een 'vieze' methode zou gaan.
Bepaalde x waarde, met een eenvoudige formule voor de punten, en je hebt de y-waardes die wel mogen.

[ Voor 27% gewijzigd door tie-rep op 22-03-2004 23:08 ]


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
tie-rep schreef op 22 maart 2004 @ 22:53:
dit is dus echt een raar figuur!

wat je doet, is eerst een grafiek maken met 3 assen en daarbinnen ga je zitten knoeien totdat er een ruit ontstaat....

Zoals al eerder gezegd, moet je idd een 6 hoek overhouden.
Dus trek op die onderste as, ipv de huidige min/max lijnen, de lijnen net zo consequent als de andere 2. Dan zie je dus een ....

idd 6 hoek :)

[afbeelding]
zo dus :)

Verschillende aanpakken mogelijk.
Ik denk dat ik voor een 'vieze' methode zou gaan.
Bepaalde x waarde, met een eenvoudige formule voor de punten, en je hebt de y-waardes die wel mogen.
ghe ik dacht ook al, hoe kan dat nou een ruit worden :P

Verwijderd

Topicstarter
Maaar het idee is juist dat Bmin, Bmax, Rmin, Rmax, Fmin en Fmax vast blijven staan en daartussen verschuift de as.. er is dus bij mij helemaal geen sprake van dat Bmin en Bmax resp groter en kleiner worden oid... en dan krijg je dus geen 6hoek..
want wat Tie-rep in bovenstaand paatje heeft gedaan is de Min en Max waarden veranderd en dan krijg je idd een 6hoek, maar dat is dus helemaal niet mijn opzet...

De vaste waarde van Min en Max zijn niet voor niets gekozen.. want als je het geheel doortrekt naar de toepassing en je zou met de cursor in de 6hoek rechtsonder gaan staan.. als je dan de lijnen trekt, kom je uit op een max-waarde voor B, een max-waarde voor F, maar dus maar de helft van R, terwijl dit theoretisch ook een max-waarde zou moeten zijn.... dus dan klopt de 6hoek niet echt meer.. dit bereik je wel met die ruit....
Probeer namelijk maar eens de waarde (Bmax, Rmax, Fmax) of (Bmin,Rmin,Fmin) te vinden in die 6hoek..
ghe ik dacht ook al, hoe kan dat nou een ruit worden
zo dus :P

misschien dat ik een dikke zonnebril opheb, en daarom nix meer zie ;) Maar de 6hoek lijkt me dus niet de oplossing.. als ik het fout heb, dan hoor ik het toch graag, want misschien bedoelen jullie wel iets anders en pak ik het verkeerd aan ;)

[ Voor 5% gewijzigd door Verwijderd op 23-03-2004 08:33 . Reden: update ]


Verwijderd

ik heb nog eens naar die code van Genoil gekeken, maar het kan denk met een stuk minder rekenwerk dan de in- en uitproducten allemaal uitrekenen, omdat de uitproducten toch alleen een z component hebben en het inproduct dus gewoon de vermenigvuldiging van die componenten. Dus wordt het (pseudocode, zit niet zo in as)
code:
1
2
3
4
5
6
sameSide (p1,p2,a,b) {
  return (
    (b.x*p1.y-p1.x*b.y+p1.x*a.y-a.x*p1.y+a.x*b.y-b.x*a.y)*
    (b.x*p2.y-p2.x*b.y+p2.x*a.y-a.x*p2.y+a.x*b.y-b.x*a.y)
  >=0)
}

[ Voor 10% gewijzigd door Verwijderd op 23-03-2004 10:05 ]


Verwijderd

Topicstarter
ik zal er nog eens mee bezig gaan.. snap op dit moment nog niet zoveel van de code, dus ga er eens even flink voor zitten..

tot dit moent dus iig erg bedankt, en als er wat is dan horen jullie het wel ;)

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Verwijderd schreef op 23 maart 2004 @ 09:59:
ik heb nog eens naar die code van Genoil gekeken, maar het kan denk met een stuk minder rekenwerk dan de in- en uitproducten allemaal uitrekenen, omdat de uitproducten toch alleen een z component hebben en het inproduct dus gewoon de vermenigvuldiging van die componenten. Dus wordt het (pseudocode, zit niet zo in as)
code:
1
2
3
4
5
6
sameSide (p1,p2,a,b) {
  return (
    (b.x*p1.y-p1.x*b.y+p1.x*a.y-a.x*p1.y+a.x*b.y-b.x*a.y)*
    (b.x*p2.y-p2.x*b.y+p2.x*a.y-a.x*p2.y+a.x*b.y-b.x*a.y)
  >=0)
}
klopt idd, degene die dat geschreven heeft was lui en gebruikte de in director inegbouwde 3D functies :) (denk overigens dat het in dit specifieke geval veel "dirtier" kan dan met deze code)

wat de ruit/hexagon discussie betreft: ik snap op zich niet precies waar de grafiek voor moet dienen, maar als je de min en max waarden overal gelijkgeschaald houd (dus op 25%/75%) wordt het een hexagon.

zo met het blote oog bekeken lijken bmin en bmax op resp 1/6 en 5/6 te staan. je zou op z'n minst moeten kunnen verklaren waarom die daarop staan om te kunnen aantonen dat de ruit de juiste vorm is...

[ Voor 5% gewijzigd door Genoil op 23-03-2004 11:03 ]


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

drm

f0pc0dert

ik weet het.. de titel is misschien vaag, maar weet ook niet hoe ik het moet noemen
offtopic:
Zet de volgende keer iig de taal er even voor in blokhaken ;)

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

Pagina: 1