Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 19. 07. 2017 09:09 — Editoval pfranz (19. 07. 2017 09:17)

pfranz
Zelenáč
Příspěvky: 7
Reputace:   
 

Body na elipse

Zdravím.
Hledám vhodný algoritmus do programu, který by mi spočítal body na elipse.
O elipse vím, že má střed S[0.5; 0.5] a její šířku a výšku.
Dál vím, že chci body mít umístěné v nějakém rovnoměrném rozložení nejprve na její horní polovině a pak i na její dolní polovině. Hranice jsou dány. Když si představím jednotkovou kružnici tak pro horní polovinu jsou hranice PI/4 až 3/4 * PI a v dolní polovině 5/4 * PI až 2PI. Zároveň vím počet bodů pro nalezení (např.: 5).

Dá s z těchto údajů složit nějaká obecná funkce pro nalezení bodu B[x, y]?

1)
Zkoušel jsem to přes rovnici elipsy
(x-m)^2 / aa + (y-n)^2 / bb = 1
kde za m a n jsem dosadil souradnice stredu a za "a" a "b" sirku/2 a vysku/2
a o y jsem prohlásil, že má tvar y = kx + q a že tato přímka prochází středem S a počátkem [0,0] tak mi vyšlo že y=x
a to mi přijde jako blbost

2)
taky jsem zkoušel najít bod B takto:
x = S[x] + a * cos u
y = S[y] + b * sin u
kde
a = sirka / 2
b = vyska / 2
u je uhel, který asi svírá přímka procházející středem S a s přímkou rovnoběžnou s osou x a také procházející středem S
Body mi pak i nějak vyšli, ale jsou nepřesné...


Kdyby měl někdo nějaký nápad moc by mi to pomohlo. Je to příklad z reálného života, potažmo ze zaměstnání programátora :)
Díky
Petr

Offline

  • (téma jako vyřešené označil(a) pfranz)

#2 19. 07. 2017 10:23

Jj
Příspěvky: 8769
Škola: VŠB, absolv. r. 1970
Pozice: Důchodce
Reputace:   599 
 

Re: Body na elipse

↑ pfranz:

Dobrý den.

Řekl bych, že je nutno vědět, co přesně znamená toto:

"... chci body mít umístěné v nějakém rovnoměrném rozložení ..."


Pokud se tedy nemýlím.

Offline

 

#3 19. 07. 2017 10:33

pfranz
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Body na elipse

↑ Jj:
To znamená, že body v dané výseči by měli mít mezi sebou stejné rozestupy. Takže když naleznu jeden bod na elipse tak další bude posunut o nějakou konstantu. Třeba se zvetsi/zmensi uhel oproti ose x o konstantu c.
Jestli vám to tedy pomohlo...

Offline

 

#4 19. 07. 2017 10:42

vlado_bb
Moderátor
Příspěvky: 6324
Škola:
Reputace:   144 
 

Re: Body na elipse

↑ pfranz: Pomohlo by, ak by islo o kruznicu. Pri nej totiz rovnakemu stredovemu uhlu zodpoveda aj rovnaka vzdialenost medzi bodmi na kruznici. Pri elipse nie, tu sa slovo "rovnomerne" da chapat minimalne dvomi roznymi sposobmi - rovnake uhly alebo rovnake vzdialenosti. Tak si vyber.

Offline

 

#5 19. 07. 2017 10:45

pfranz
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Body na elipse

↑ vlado_bb:
Nevim co je lepší. Záleží, jak to pak bude vypadat a líbit... :D
Tak třeba pro úhly.

Offline

 

#6 19. 07. 2017 10:58 — Editoval Cheop (19. 07. 2017 10:59)

Cheop
Místo: okres Svitavy
Příspěvky: 8209
Škola: PEF VŠZ Brno (1979)
Pozice: důchodce
Reputace:   366 
 

Re: Body na elipse

↑ pfranz:
Rovnice elipsy bude:
$\frac{(x-\frac 12)^2}{a^2}+\frac{(x-\frac 12)^2}{b^2}=1$
kde $a$ je polovina "délky" elipsy
      $b$ je polovina "šířky" elipsy
druhá rovnice bude mít tvar:
$y=kx+q$
kde $k$ bude tangens úhlu (pi/4,pi/3.....) a bude procházet středem S=(1/2,1/2) tj.
dopočítáš q
a pak jen vypočítáš souřadnice bodu z výše uvedených rovnic.
Např. pro úhel $\frac{\pi}{3}$ budeš řešit rovnice:
$\frac{(x-\frac 12)^2}{a^2}+\frac{(x-\frac 12)^2}{b^2}=1\\y=\sqrt 3\,x+\frac{(1-\sqrt 3)}{2}$
poloosy a,b znáš


Nikdo není dokonalý

Offline

 

#7 19. 07. 2017 11:38 — Editoval LukasM (19. 07. 2017 11:43)

LukasM
Příspěvky: 3274
Reputace:   193 
 

Re: Body na elipse

↑ Cheop:, ↑ pfranz:
Já se nechci vměšovat do debaty, ale nebylo by snadnější vyjít z toho druhého nápadu, tedy že pro bod na elipse platí
$x=S_x+a\cos{\varphi}\\y=S_y+b\sin{\varphi}$? Nevím, proč by takto vzniklé body měly být nepřesné, to spíš zavání tím, že při tom výpočtu někdo udělal chybu...

Offline

 

#8 19. 07. 2017 11:50

Cheop
Místo: okres Svitavy
Příspěvky: 8209
Škola: PEF VŠZ Brno (1979)
Pozice: důchodce
Reputace:   366 
 

Re: Body na elipse

↑ LukasM:
Ano to je ono nic jednoduššího nevymyslíme.


Nikdo není dokonalý

Offline

 

#9 19. 07. 2017 11:51

pfranz
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Body na elipse

↑ LukasM:
Přesně tak :) chyba byla v tom, že já vzniklé souřadnice potřeboval přepočítat do rozmezí od 0 do 1 :) aneb zlatá trojčlenka funguje vždy a všude, když se na ni nezapomene :D

Offline

 

#10 19. 07. 2017 12:04

LukasM
Příspěvky: 3274
Reputace:   193 
 

Re: Body na elipse

↑ pfranz:
Ještě jsem se nad tím zamyslel a pochopil jsem tu nepřesnost o které mluvíš. Ty nemyslíš nepřesné v tom smyslu, že by bod nebyl na elipse, ale vadí ti ta nerovnoměrnost, tedy že parametr $\varphi$ není polární úhel toho bodu. Pak je ještě možnost vypočítat pro daný úhel radiální vzdálenost od středu ze vztahu
$r(\varphi)=\frac{ab}{\sqrt{(b\cos{\varphi})^2+(a\sin{\varphi})^2}}$
a z toho už snadno dostaneš xy souřadnice toho bodu.

Pak skutečně půjde vykreslit bod elipsy pod daným úhlem od středu. Jestli to je to co potřebuješ je ovšem jiná věc. Hezčí rozdělení, kdy by se krokovalo podle délky té elipsy bude o poznání složitější a bude asi vyžadovat vyjít z nějaké aproximace eliptických integrálů - to už ale spíš hádám.

Co myslíš povídáním o trojčlence mi jasné není, ale to asi nevadí.

Offline

 

#11 19. 07. 2017 12:13 — Editoval pfranz (19. 07. 2017 12:28)

pfranz
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Body na elipse

↑ LukasM:
Wow. Tak já tou nepřesneostí myslel, že bod není na obvodu elipsy. Ted uz jen vymyslim jak udelat aby pri lichem poctu mel stredovy bod uhel 90° vuci ose x :D
Tenhle vzorec mi sice neco rika a o polarnich souradnicich jsem neco slysel na vysoke, ale uspesne jsem to zapomnel... Takze tomu moc nerozumim. Ja dopředu vzdálenost bodu od středu neznám.

Jo a tou trojčlenkou jsem myslel to, že mi souřadnice vycházeli v rozmezi x od 0 do sirky/2 a y od 0 do vysky/2. Musel jsem si je prepocitat do intervalu <0,1> kdy 1 je vzdy bud sirka nebo vyska (podle souradnice). ;) A to jsem delal blbe...


Edit
Vlastne sjem to mel takhle:
var radian = (Math.PI / 180.0) * uhel;
var x = 0.5 + (((this.Width / 2) * (Math.Cos(radian))) / 100);
var y = 0.5 + (((this.Height / 2) * (Math.Sin(radian))) / 100);
Point p = new Point(x, y);

Coz bylo spatne a nevychazelo to. Pritom to stacilo opravit na:
var radian = (Math.PI / 180.0) * uhel;
var x_pom = ((this.Width / 2) * (Math.Cos(radian))) / this.Width;
var y_pom = ((this.Height / 2) * (Math.Sin(radian))) / this.Height;
var x = 0.5 + x_pom;
var y = 0.5 + y_pom;
Point p = new Point(x, y);

Offline

 

#12 19. 07. 2017 12:29

LukasM
Příspěvky: 3274
Reputace:   193 
 

Re: Body na elipse

↑ pfranz:
No, vzdálenost od středu znát nemusíš, ta právě vyjde z toho vzorce co píšu. Zkrátka a dobře, body elipsy jsou:
$x=S_x+\frac{ab\cdot\cos{\varphi}}{\sqrt{(b\cos{\varphi})^2+(a\sin{\varphi})^2}}\\y=S_y+\frac{ab\cdot\sin{\varphi}}{\sqrt{(b\cos{\varphi})^2+(a\sin{\varphi})^2}}$.

Stačí dosadit úhel $\varphi$ a vypadne ti bod na elipse, který leží ve směru $\varphi$. Je to stejný bod, který by ti vyšel z postupu od Cheopa, akorát teď nemusíš řešit tu soustavu. Jestli je to to co potřebuješ, to je jiná otázka.

Offline

 

#13 19. 07. 2017 12:34

LukasM
Příspěvky: 3274
Reputace:   193 
 

Re: Body na elipse

↑ pfranz:
A ještě k tomu editu. Není mi jasné, proč by body

var x_pom = ((this.Width / 2) * (Math.Cos(radian))) / this.Width;
var y_pom = ((this.Height / 2) * (Math.Sin(radian))) / this.Height;

měly ležet na něčem jiném než na kružnici o poloměru 0,5. Jak výška, tak šířka v tom výpočtu vypadnou....

Offline

 

#14 19. 07. 2017 12:41

pfranz
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Body na elipse

↑ LukasM:
No, body jsou umisteny na tzv. relativnim panelu, který má do sebe vepsenou elipsu(potazmo kruznici).  Ten relativni panel ma takovou krasnou vlastnost ze ikdyz ma ruzne dlouhe strany "a" a "b" tak v jeho souradnem systemu je to jedno a jeho body se pohybuji v intervalu <0;1>.
Asi proto jsem to chtel pro elipsu a ne pro kruznici :D Na obrazovce proste vidim elipsu :D

Offline

 

#15 19. 07. 2017 12:44

LukasM
Příspěvky: 3274
Reputace:   193 
 

Re: Body na elipse

↑ pfranz:
Takže když to řeknu vlastními slovy, tak dlouho jsi vymýšlel, jak nakreslit elipsu, až jsi zjistil, že to nedáš dohromady a naštěstí sis uvědomil, že máš celou dobu kreslit kružnici?

Offline

 

#16 19. 07. 2017 12:48

pfranz
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Body na elipse

↑ LukasM:
Ja kreslim elipsu, ale neuvedomil jsem si ze pro ten panel je to kruznice :D A tek jsem hledal body pro elipsu... Kdyz jsem to ted zjednodusil tak to hledani bodu na kruznici funguje krasne :D

tedy
x = Sx + cos(alpfa) / 2
y = Sy + sin(alpfa) / 2

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson