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
Stránky: 1
Vážená skupino,
již pár týdnů se snažím dokončit funkci, psanou v Delphi, pro ofsetování trajektorie stroje. Trajektorie může být složená z úseček a oblouků, otevřená nebo uzavřená, libovolně se protínající. Tuto trajektorii bych rád ofsetoval a to tangenciálně vlevo nebo vpravo o zadaný poloměr nástroje (válcového tvaru).
Zpracování trajektorie, průniky úsečka / oblouk, základní ofsetování trajektorie mám hotové. Dostávám se ale do bodu, kdy musím vyloučit neplatné smyčky vznikající ve vnitřních částech trajektorie. Zde jsem zkoušel různé řešení jako BFS, DFS, hledání smyček a uzavřených polygonů, ale nikdy jsem to nedotáhl do úspěšného konce. Nakonec jsem skončil u číslování vinutí, na němž funguje teselace u OpenGL. Nedaří se mi to ale dokončit, správné řešení prostě nějak "nevidím".
Rád bych zde našel někoho, kdo tomu rozumí, a byl by ochotný mi poradit. Nejlépe nějaký matematický génius. Rozhodně se nejedná o nic jednoduchého, co by šlo řešit v jednom kroku. Můžeme se domluvit i na nějaké odměně. Více soukromě.
Budu moc rád za jakoukoliv pomoc.
Alex.
Offline
Aha, chápu. Ono to vypadá jako přímočaře řešitelný problém, ale není, rozpadá se to do spousty dílčích řešení. Naštěstí je o tom dost literatury, zrovna na ploše počítače mám připnuté tohle: https://seant23.wordpress.com/wp-conten … orithm.pdf. Asi bych si netroufnul to vymýšlet znova, nejlepší bude to odněkud opsat :-) Jinak tam hrozí chyby nebo nepokryté kombinace, na to občas trpí i různé profi CAMy.
Offline
Ano. Je to spoustu dílčích řešení. Začátek je jednoduchý, ale poté se to zesložiťuje. Domnívám se, že číslování vinutí je řešení. Ale tápu i například s tím, jak z komplexního polygonu (který se může libovolně protínat) udělat jednoduché.
Offline
Ok. Nyní mám PolyLine z úseček a oblouků. PolyLine je uzavřený. Prošel jsem všechny průniky a rozsekal PolyLine na ještě více úseček a oblouků. Nyní všechny části navazují na sebe. Teď bych potřeboval z této rozsekané PolyLine vyseparovat všechny uzavřené reagiony, tj. všechny jednoduché polygony. Zkoušel jsem pár postupů, ale bez úspěšného dokončení. Napadá někoho nějaký vhodný postup jak toho dosáhnout?
Děkuji.
Offline
PolyLine se různě protíná. A abych určil směry vinutí regionů, musím je najít. Protínající části PolyLine rozsekám z důvodu hledání regionů. Pak už jen stačí hledat koncové body úseček nebo oblouků. Zde ale nevím jak najít všechny vzniklé regiony.
Offline
To je pravda. Jenže odsazení trajektorie je jen část celku. Ty PolyLine je již odsazená trajektorie. Jenže ve vnitřních rozích dochází ke křížení. Vznikají smyčky, které se musí zrušit. V principu tak fungují CAM aplikace, kdy nástroj nesmí narušit druhou stranu trajektorie než na kterou je odsazen. Níže jsou dva obrázky z mé testovací aplikace. Žlutě je vyznačena trajektorie stroje. A zeleně je vyznačená PolyLine, resp. ofsetovaná trajektorie. V rozích a dalších případech dochází ke křížení PoliLine. Nyní potřebuji z této PolyLine určit uzavřené regiony a vyloučit je v případě že by nástroj narušil původní trajektorii.
https://ibb.co/KpSHcRhw
Offline
A odsazená je ta zelená ?
A jak ti tam vlastně v rozích ty smyčky vznikly? Protože když si trajektorii (po přímce) odsadím já, ručně, tak mi tam žádné takové smyčky nevznikají. Akorát že si musím spočítat nový průsečík těch dvou přímek
Což bych doporučoval i tobě. Dokud budeš vědět, které čáry jsou ty původní a které jsi tak doplnil, přijde mi to jednodušší.
Jako problém vidím spíš když ti po odsazení něco úplně zanikne - jako že máš tvar, do kterého se nástroj vůbec nevejde.
Offline
↑ unknow005:
Chápu to dobře, že když odsadíš černou čáru zleva, vznikne červená, a tebe z ní zajímají jen části které ohraničuji zelený a fialový region? (kresleno myší od ruky)
https://imgur.com/a/tTRNJKI
Offline
↑ MichalAld:
V jednoduchém případě máte pravdu, ale PolyLine může být jakýkoliv tvar. Ty smyčky jsou propojení dvou odsazených částí trajektorie pokud svírají úhel menší než 180°. Další případy jsou zúžené části atd., kam se nástroj nemusí vejít. To je samozřejmě nutné nějak zjistit.
↑ Aleš13:
Ano, přesně tak.
...
Hodně jsem o tom přemýšlel a možná bych na to měl jít "nematematicky". Vzal bych nástroj - kružnici a táhl ji po trajektorii. A ve velmi jemném kroku zjišťoval, zda-li nedojde k narušení nějaké části trajektorie. Dnešní počítače jsou již tak výkonné, že by to nemuselo trvat dlouho.
Offline
↑ unknow005:Jak to myslíš s těmi zúženými částmi? Dokud odsazená trajektorie sama sebe neprotne, tak se nástroj vejde. Trochu horší je ale analýza situace, kdy se původní křivka může sama protínat - to na začátku píšeš, že může. Tady budeš muset dodefinovat, jak se ta operace má chovat. Když od černé čáry která sama sebe kříží uděláš jednostranné odsazení, tak se rozpadne na dvě části - červená část je jasná, ale co modrá? Bude černou křížit, bude se jí dotýkat nebo bude ukončená ve vzdálenosti odsazení ale z druhé strany? Nebo ještě jinak?
https://imgur.com/a/VKm1GKp
Offline
Odsazení se vždy musí určit, tj. levé nebo pravé tangenciálně od trajektorie. Poté se musí určit, zda se jedná o vnější nebo vnitřní konturu. Vnější je obvod, vnitřní je díra. Může ale vzniknout i situace, kdy trajektorie není uzavřená.
Nakreslená případ není správný, resp. červená trajektorie je ta správná a modrá je vyloučená. Kdyby bylo odsazení opačné, tak poté se smyčka vykonat musí, protože je na vnější kontuře.
Offline
↑ Aleš13:
Původní trajektorie by se neměla protínat, ale mohou existovat výjimky, např. na vnější kontuře se mohou objevit smyčky pro dosažení ostrých rohů. Vnější smyčky jsou navíc vhodnější pro méně dynamické stroje.
Offline
Jasně, chápu. Důležité je, abys to přesně popsal. Každou výjimku povýšit na pravidlo a formálně popsat, pak teprve se dá hledat nějaký algoritmus. A dost možná, že se při správném popisu najednou vylíhne sám :-)
Píšeš v prvním příspěvku, že polyline je libovolně se protínající. To musíš nějak ošetřit, buď to změnit nebo přesně říct, co se stane.
BTW, o smyčkách v rozích jsem ještě neslyšel. Normálně se to řeší přesným zastavením G09 a nemusíš to takhle obcházet.
Offline
G09 neznám. Zastavení a rozjetí stroje může být problém, pokud je nástroj např. laser nebo plazma. Poté může dojít k upálení rohu.
Všechno se určitě popsat nedá. Ale princip tvorby ofsetované trajektorie lze rozdělit na více částí a ty zdokonalovat. Když nad tím ale přemýšlím, tak nějaké číslování vinutí, hledání regionů a tak, možná žádné matematické řešení "na všechny možné případy" neexistuje. Začíná se mi jevit vytvoření kružnice jako nástroje a tu posouvat po trajektorii jako nejlepší a nejuniverzálnější řešení. Bude to velmi mnoho detekcí, časově náročné, ale v dnešní době to již asi není problém.
Offline
unknow005 napsal(a):
Všechno se určitě popsat nedá.
Pak nelze ani sestrojit alogoritmus, který to řeší.
Offline
Ta kružnice je jen numerické řešení toho co jsi začal dělat analyticky (což nemusí být chyba), ale od problému rozhodnout co dělat s těmi osiřelými trajektoriemi tě neuchrání. Podívej se na ten odkaz co jsem ti poslal, tam je k tomu diskuse. A další odkazy.
Offline
unknow005 napsal(a):
Bude to velmi mnoho detekcí, časově náročné, ale v dnešní době to již asi není problém.
Problém to právě celkem snadno být může. Protože musíš tu aktuální polohu nástroje kontrolovat proti všem ostatním bodům trajektorie.
Offline
Stránky: 1