QuadCurve2D: find punkt på linjen

Tags:    java

<< < 12 > >>
Hejsa.
Jeg sidder og er i gang med et program som tegner en buet linje mellem to punkter. Dette gør jeg ved at benytte QuadCurve2D, som vist nedenfor:

g2.draw(new QuadCurve2D.Double(...

Men nu har jeg det problem at jeg ønsker at tegne en pil på linjen. Men det har jeg store problemer med, da jeg ikke ved hvor meget linjen buer, og derfor ikke ved hvor pilen skal tegnes.

Er der nogen der har en ide til hvordan jeg løser problemet? Måske skulle jeg ikke brude QuadCurve2D. Men findes der andre gode alternativer?

Jeg håber nogen kan hjælpe mig. Det er nemlig et meget stor problem.



14 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Jeg er ikke inde i Java over hovedet, så vidste ikke om QuadCurve havde sådan en funktion.

problemet ligger i at det ikke skal være en halvcirkel - altså nærmere et stykke af en cirkel i stedet..

Det kan godt gå hen og blive ret omfattende udregninger der skal laves hvis du skal kende den præcise linje, og det vil selv der være svært at placere pile på linjen..

Kom til at tænke lidt mere over sinuskurven, men når det er en matematisk funktion, vil det ikke være muligt hvis f.eks. de to punkter er lodrette over hinanden - så skal der i hvert fald laves to halve funktioner der mødes på midten.

Jeg sad og kiggede lidt på nettet, og fandt noget der kunne være brugbart i dette forum:

http://forums.sun.com/thread.jspa?threadID=526935

Nærmere bestemt svar #1

Ved ikke om det er noget?



Jeg tror bare du skal finde ligningen for en 4 grads polynonium. Jeg har ikke lige mine matematik noter her, men du kan lige få et link.

http://www.analyzemath.com/quadraticg/quadraticg.htm

Edit: Hov det var squ til en 2. gradspolynomie.



Indlæg senest redigeret d. 01.03.2010 09:18 af Bruger #6559
Det jeg sagde før passer ikke den bounding box Java giver er med control punktet.

Så her er en anden ide, brug subdivide til at dele kurven i 2 dele ende punktet af den første del må være et punkt på kurven.

Fold kodeboks ind/udKode 




Du kan jo gå ind og blive mere matematisk og tegne det som en sinuskurve i stedet for.

Hvis du sætter en funktion op som tegner kurven, kan du udregne forskellige (x,y) punkter på linjen ;)



... eller et mere simpelt andengradspolynomium ville nok også kunne klare det ;)



Indlæg senest redigeret d. 28.02.2010 10:31 af Bruger #8773
Ehm okay ja. Men har i matematikken? Tænkte selv i elipser, i starten, men nået ikke så langt omkring det.
Det er meget vigtigt at kurven er symetrisk og har en perfekt bue.

Omkring sinus-funktionen, lyder det som en god ide. Men den skal vel fortsat skrives som en form for polynomium da y-koordinaterne ikke nødvendigvis er ens.



Hvad er det helt præcist for en kurve du vil have? en halvcirkel, eller?



Jeg vil bare have et buet kurve mellem to punkter. Nødigst en halvcirkel, men kan bruges i nødstilfælde.

Er i gang med et program til beregninger af graf teori (matematik). Grunden til at jeg ønsker de buede linjer er jeg ønsker at kunne lave buede kanter ligesom man eksempelvis ser det på dette graf:
http://wpcontent.answers.com/wikipedia/commons/thumb/a/a7/Multigraph.svg/180px-Multigraph.svg.png

Dette har jeg enlig fundet ud af at kunne løse med
g2.draw(new QuadCurve2D.Double(..., men hvis jeg bruger QuadCurv, ved jeg ikke hvor linjen er tegnet, og derfor bliver det svært at tegne pile på linjerne, hvilket jeg ønsker. :S



og der er ikke en måde hvorpå du kan få funktionen af den linje der er tegnet?



Hmm ikke hvad jeg ved. Sådan noget er jo ikke indbyggget i QuadCurve. Det er jo lidt det jeg spørger om :)



<< < 12 > >>
t