|
| Afstand punkt<->bezierkurve eller punkt<->~ Fra : Christian Madsen |
Dato : 24-06-01 14:37 |
|
| |
Thomas Krog (24-06-2001)
| Kommentar Fra : Thomas Krog |
Dato : 24-06-01 16:40 |
|
En simpel (men ineffektiv) mulighed er at bruge den funktion der tegner
kurven til også at returnere afstanden til et givent punkt (den beregner i
forvejen de pixels der skal farves)
En god nyhedsgruppe er også:
comp.graphics.algorithms
| |
SuneF (24-06-2001)
| Kommentar Fra : SuneF |
Dato : 24-06-01 23:01 |
|
> En simpel (men ineffektiv) mulighed er at bruge den funktion der tegner
> kurven til også at returnere afstanden til et givent punkt (den beregner i
> forvejen de pixels der skal farves)
Jeg tror punktet er ukendt når kurven tegnes
(noget med de skal klikke med musen i nærheden af kurven).
-S.
| |
Thomas Krog (24-06-2001)
| Kommentar Fra : Thomas Krog |
Dato : 24-06-01 23:07 |
|
> Jeg tror punktet er ukendt når kurven tegnes
> (noget med de skal klikke med musen i nærheden af kurven).
jo, min tanke var så at gentegne / simulere en gentegning når der klikkes
med musen. Som sagt en ineffektiv løsning men jeg vil tro det er hurtigt nok
til deres formål.
| |
Kent Friis (25-06-2001)
| Kommentar Fra : Kent Friis |
Dato : 25-06-01 15:35 |
|
Den Mon, 25 Jun 2001 00:06:33 +0200 skrev Thomas Krog:
>> Jeg tror punktet er ukendt når kurven tegnes
>> (noget med de skal klikke med musen i nærheden af kurven).
>
>jo, min tanke var så at gentegne / simulere en gentegning når der klikkes
>med musen. Som sagt en ineffektiv løsning men jeg vil tro det er hurtigt nok
>til deres formål.
Nu vi snakker om Bezierkurver - er der nogen der kan forklare mig (med
matematik på HH niveau A), hvordan man berenger en Bezierkurve?
Mvh
Kent
--
And the reboot record goes to: Windows 2000.
With only 3 seconds from the administrator password was entered till
the system requested a reboot.
| |
Thomas Krog (25-06-2001)
| Kommentar Fra : Thomas Krog |
Dato : 25-06-01 17:38 |
|
> Nu vi snakker om Bezierkurver - er der nogen der kan forklare mig (med
> matematik på HH niveau A), hvordan man berenger en Bezierkurve?
det kan gøres sådan (hvor POINT er defineret med de nødvendige operatorer).
(du kan eventuelt tegne punkternes placering på papir):
double minLength = 5; // alt hvor detaljeret det skal være
void draw(POINT a,POINT b,POINT c,POINT d){
if(a.dist(d) < minLength)
drawLine(a,b,c,d);
else{
POINT e = 0.5 * (b+c);
POINT p1 = 0.5 * (a+b);
POINT p2 = 0.5 * (e+p1);
POINT p5 = 0.5 * (c+d);
POINT p4 = 0.5 * (e+p5);
POINT p3 = 0.5 * (p2+p4);
draw(a,p1,p2,p3);
draw(p3,p4,p5,d);
}
}
| |
Kent Friis (25-06-2001)
| Kommentar Fra : Kent Friis |
Dato : 25-06-01 18:16 |
|
Den Mon, 25 Jun 2001 18:38:07 +0200 skrev Thomas Krog:
>> Nu vi snakker om Bezierkurver - er der nogen der kan forklare mig (med
>> matematik på HH niveau A), hvordan man berenger en Bezierkurve?
>
>det kan gøres sådan (hvor POINT er defineret med de nødvendige operatorer).
>(du kan eventuelt tegne punkternes placering på papir):
>
>double minLength = 5; // alt hvor detaljeret det skal være
>
>void draw(POINT a,POINT b,POINT c,POINT d){
> if(a.dist(d) < minLength)
> drawLine(a,b,c,d);
> else{
> POINT e = 0.5 * (b+c);
> POINT p1 = 0.5 * (a+b);
> POINT p2 = 0.5 * (e+p1);
> POINT p5 = 0.5 * (c+d);
> POINT p4 = 0.5 * (e+p5);
> POINT p3 = 0.5 * (p2+p4);
> draw(a,p1,p2,p3);
> draw(p3,p4,p5,d);
> }
>}
>
>
Takker - det må jeg prøve at leje med...
Mvh
Kent
--
And the reboot record goes to: Windows 2000.
With only 3 seconds from the administrator password was entered till
the system requested a reboot.
| |
SuneF (24-06-2001)
| Kommentar Fra : SuneF |
Dato : 24-06-01 22:45 |
|
> Spoergsmaalet er simpelt:
Ja, men det behøver svaret ikke være ;)
> Jeg skal regne afstanden fra et punkt til en bezierkurve eller en quad
> kurve og skal bruge en formel eller algoritme for dette. Bare, at der er
> nogen, der kan give mig subj. som kodeeksempel, er jeg glad (sprog
> underordnet).
Sådan rent matematisk kan det formuleres som et optimeringsproblem
givet nogle restriktioner. Den eneste metode jeg kender til at løse dette er
at anvende Lagrange multipliere.
Jeg skal da ikke kunne udelukke der findes hurtigere metoder
f.eks. differential geometriske formler.
Jeg har dog aldrig forsøgt at implementere den slags sjov.
-S.
| |
Jakob Møbjerg Nielse~ (25-06-2001)
| Kommentar Fra : Jakob Møbjerg Nielse~ |
Dato : 25-06-01 00:52 |
|
> Spoergsmaalet er simpelt:
Har du prøvet at spørge i dk.videnskab? Der er sikkert nogen der ved
noget om det.
--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey, he reminds me of someone who looks just like him!" - Me
| |
Esben Mose Hansen (25-06-2001)
| Kommentar Fra : Esben Mose Hansen |
Dato : 25-06-01 20:01 |
|
Christian Madsen wrote:
> Spoergsmaalet er simpelt:
>
> Jeg skal regne afstanden fra et punkt til en bezierkurve eller en quad
> kurve og skal bruge en formel eller algoritme for dette. Bare, at der er
> nogen, der kan give mig subj. som kodeeksempel, er jeg glad (sprog
> underordnet).
>
tjah, så vidt jeg kan se kan man hurtigt (10min på bagsiden af et
A4-ark) reducerer problemet til et treidegradspolynomium. Dvs. at hvis
din kvadratiske kurve hedder:
a*t^2+b*t+c
hvor t er et reelt tal og a,b,c ligger i R^2 haves at mindsteværdien af
|a*t^2+b*t+c|^2=<a*t^2+b*t+c,a*t^2+b*t+c>
som er afstanden af kurven ind til origon (bemærk at det er ligegyldigt
om det er origon eller et vilkårligt punkt..det flytter blot værdien af
c) ligger enten hvor differentialet af ovenstående er 0 eller i randen,
dvs. i yderpunkterne af kurven. De sidste er trivielle, og det andet
giver med lidt købmandsregning (<.,.> er forøvrigt det sædvanlige
prikprodukt)
4<a,a>*t^3+<a,b>*t^2+2(2<a,c>+<b,b>)+<b,c>
det skal så bare sættes lig nul og løses... jeg er sikker på i kan finde
løsningen til et 3.gradspolynimion på nettet, det er noget med et par
kvadratrødder. Jeg er også klar over at min kvardratiske kurve ikke er
på den normale form for bezier/quad kurver, men jeg gider ikke lige
regne relationen ud nu... og jeg kan ikke engang huske om det er den ene
eller begge der kan udtrykkes på ovenstående form. Men det er altsamment
detaljer.
mvh. Esben
P.S: Ingen garanti for ovenstående lignings rigtighed... den skal regnes
efter lidt mere omhyggeligt en jeg har gjort...
| |
|
|