Anonymní profil peter – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil peter – Programujte.comAnonymní profil peter – Programujte.com

 

Příspěvky odeslané z IP adresy 2001:718:2601:258:58e5:510a:49c3:8301...–

peter
.NET › Elipsa a rozpočítání bodů
15. 8. 2022   #390393

#71 Pavel No, pomer stran te elipsy mas spis 1:1, kruho-elipsu :) V takovem pripade se da pouzit to kruhove rozlozeni uhlu.

A nebo by slo pro kazdy pripad pouzit jinou metodu. Treba i pro ten 5 uhelnik. Proste se vi, ze to uplne nevyjde dobre, kdyz bude elipsa prilis sisata a tak pouzit metodu pravidelnymi s uhly. Sak ten program to muze spocitat obema, neni to pro nej zadna zatez. Pokud to nedela pro 50 elips najednou, treba.

A nebo se daji napocitat uhly pro ruzne pomery stran a ruzne n-uhelniky.

peter
.NET › Elipsa a rozpočítání bodů
15. 8. 2022   #390392

https://mlich.zam.slu.cz/js-pol-to-el.htm
Trochu jsem tu funkci 1 prepsal, ted na 3. Mela by fungovat trochu lepe. Do konzoly pise pocet pokusu. Bezny n-uhelnik to najde na 8 pokusu.
Pouzil jsem vzorec v = (left + right) / 2, cili, vyberu vzdy stredovou hodnotu a pak urcim, zda ji pouzit pro left nebo right. Jenom to dal vykresluji do pixelove elipsy, coz muze byt brzda. Ale i na mem stroji v praci je to mzik, takze se mi to nece resit lepe :)

ArrayDrawPolygonToEllipse3(new classData(), 8, new classPoint(420,150), 400, 100, 'red2');
// posledni radky v kodu

5-uhelnik, o kterem je zminka, to nenajde, ale take skonci. U 5-uhelniku je ten problem, ze zvetseni strany o 1 px muze zalomit bod na dalsi ctvrtinu elipsy a dalsi bod se muze znacne posunout, klidne 199% delky strany.
Tezko rici, jak tohle resit :)
 

peter
.NET › Elipsa a rozpočítání bodů
15. 8. 2022   #390377

Ikdyz... S tou kruznici a kosodelnikem, to min neni uplne ok. To zas plati pro n>neco. A pripade kosodelniku (kosoctverec) musi byt uhel=0 pro n=4. Kdyz to pootocis, jak to mas v zadani, tak ten polygon by mel byt mensi nez ten kosodelnik.
Ale, tak, vzdycky muzes jit opacnou cestou. Max je obvod elipsy / n. A od toho budes odecitat pulky, takze si vytvoris slejne left a right.
 

peter
.NET › Elipsa a rozpočítání bodů
15. 8. 2022   #390376

Takovy matlab umi pracovat pres cmd, jen je treba najit nejaky uz na to hotovy program.

peter
.NET › Elipsa a rozpočítání bodů
15. 8. 2022   #390375

A co vyuzit externi program? Zavolat si cmd, at ti to vygeneruje CAD nebo nejaky program, co to umi.
 

peter
.NET › Elipsa a rozpočítání bodů
15. 8. 2022   #390374

Mne nejak unika, jak se ti to muze zacyklovat? To, ze se to zacykluje mne, je vec jina, ja to nemam dotazene. A navic to pocitam na pixelove care obvodu :) Pocitam ne uplne dobre. Coz jde videt prave u tech mensich n-uhelniku jako 3, 4, 5...Normalne spocitas priblizeni zleva, zprava a vystupem je nejpresnejsi. V okamziku, kdy se ti leva, prava nezmeni, tak cyklus ukoncis.

smin = Minimalni strana = obvod kruhu kratsi strany (a nebo b) / n
smax = Maximalni strana = obvod elipsy / n

Pak spocitas rozdil tech dvou a podelis dvema. Cili, postupne navysujes levou stranu o d, d/2, d/4
d = round((smax - smin) / 2)
right = smax
new = left + d

Kdyz se polygon s new vejde do elipsy, tak si left = new, a zkusis pridat opet d, new = left + d.
Kdyz se polygon s new nevejde do elipsy, a je-li new<right, pak right=new a d = d / 2.
A to opakujes, dokud je d>0 px. Takze se to nemuze preci zacyklit.

Vystupem je left a right a z tech vyberes to, co se do elipsy veslo nejlepe.
Je uplne jedno, jakym zpusobem vejiti do elipsy pocitas.
Samozrejme, uplne nejlepsi by bylo pocitat uhly a nebo prunik kruznice s elipsou o polomeru left.

---

Nebo se da smin urcit tez jako vepsany kosodelnik, pokud je n>=4
smin = 4 * odm(aa + bb)

A tim, ze pouzivas deleni intervalu, tak se vicemene dostanes k pruseciku do 7-14 kroku. Coz je porad lepsi nez me pixelove reseni, left +1 +1 +1
1000 500 250 125 63 32 16

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý