Det lyder som om du kun har 2 punkter: start punktet og slut punktet.
Har jeg ret i at du så ønsker at lave en 1/4 ellipse, som starter i (x1,y1) og slutter i (x2,y2) ?
Skal ellipsen tegnes, eller vil du bare have en formel, eller noget 3. ?
Jeg antager at halv-akserne er hhv. lodret og vandret - ellers er der uendeligt mange løsninger.
hej HBP2
ja jeg har jo kun to punkter. ;).
"
Har jeg ret i at du så ønsker at lave en 1/4 ellipse, som starter i (x1,y1) og slutter i (x2,y2) ?"
Ja
"Skal ellipsen tegnes, eller vil du bare have en formel, eller noget 3. ?"
Jeg har egentlig bare brug for en formal da jeg bare skal bruge alle punkterne. med evt. 2 px interval.
Mht: "Jeg antager at halv-akserne er hhv. lodret og vandret - ellers er der uendeligt mange løsninger. "
Så forstår jeg ikke helt hvad du mener.. Men jeg har f.eks punkterne: (200x og 150y) og (100x og 200y)
Håber du har noget hjælp at smide...
En ellipses halv-akser er de to linier som går fra centrum og ud til de 2 punkter på ellipsen som er henholdsvis fjernest og tættest på centrum - i dette tilfælde er det dine to punkter.
Givet 2 punkter (x1,y1) og (x2,y2) er der to mulige ellipser: den med centrum i (x1,y2) og den med centrum i (x2,y1).
Halv-aksernes længde er henholdsvis a=abs(x2-x1) og b=abs(y2-y1) , hvor abs() er den numeriske værdi.
En ellipse er så alle de punkter (x,y) der opfylder:
(x-Xc)^2/a^2 + (y-Yc)^2/b^2 = 1
hvor centrum er i (Xc,Yc).
Det var baggrunden - at beregne punkterne er derimod noget mere besværligt... der er smarte algoritmer til at beregne punkterne (Bresenham Midpoint), men du kan osse bare beregne et punkt for hver 0.1 grader, for vinklen 0..90 grader, eller noget lignende, afhængigt af hvor mange punkter du har brug for:
var v, xc, yc, a, b, step;
a = 100; b = 200;
xc = 100; yc = 100;
step = 0.1;
for (v = 0.0; v < 90.0; v += step) {
var x, y;
x = xc + a*Math.cos(v*Math.PI/180);
y = yc + b*Math.sin(v*Math.PI/180);
}
At beregne et punkt for hver 0.1 grad er nok i overkanten - hvis du vil have et punkt for ca. hver 2nd pixels så skal du dele de 90 grader ind i ca. halvt så mange intervaller som halv-aksernes gennemsnitlige længde, dvs.:
avg = (a+b)/2;
step = 90/(avg/2);
okay rigtig fedt!!
jeg kan bare ikke rigtig finde ud af at få elipsen til at gå fra andet en x1 som er mindre end x2 og y1 som er mere end y2.. kan du evt lave formlen om så den gælder alle veje?
Jeg er ikke så god til alt det der regning. Håber du forstår??
På forhånd tak. !
Fjern abs() fra beregningen af a og b.