Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

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

#1 18. 02. 2013 13:01

groover
Zelenáč
Příspěvky: 10
Reputace:   
 

Porovnanie dvoch ploch v rovine

Zdravim,

v diplomovom projekte potrebujem porovnat obsah dvoch ploch (vacsinou 4-uholnikov). Ide o percentualne vyjadrenie spolocnej plochy vzhladom k jednej z ploch.

Plochy su zakreslene na zaklade ich suradnic, to je vsetko, co o nich viem.

Pre lepsiu ilustraciu prikladam obrazok z Labview, kde tento problem musim implementovat.

http://forum.matweb.cz/upload3/img/2013-02/88801_Ukazka.PNG

Potreboval by som pomoct, bud to pri matematickom rieseni problemu, alebo aspon pri algoritmickom. :) Kazda rada a pomoc vitana. :)

Offline

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

#2 18. 02. 2013 13:18 — Editoval martisek (18. 02. 2013 13:18)

martisek
Příspěvky: 914
Škola: MU Brno
Pozice: učitel, FSI VUT v Brně
Reputace:   52 
 

Re: Porovnanie dvoch ploch v rovine

↑ groover:

Nejlépe je využít vektorového součinu:

Čtyřúhelník vždy rozdělit na dva trojúhelníky, ze dvou stran každého trojúhelníka "vyrobit" dva vektory a spočítat jejich vektorový součin, resp. jeho velikost. Obsah čtyřúhelníka dostaneme, když tyto dvě velikosti pro každý trojúhelník sečteme a vydělíme dvěma.


Wolfram ani jiný chemický prvek matematiku nenaučí.

Offline

 

#3 18. 02. 2013 14:23

Brano
Příspěvky: 2673
Reputace:   232 
 

Re: Porovnanie dvoch ploch v rovine

Ja teda predpokladam, ze pocitanie obsahu nie je nejaky problem, da sa aj napisat jednoduchy vzorec pre n-uholnik zadany vrcholmi, ale predpokladam, ze ten asi poznas. Problem bude zrejme v tom ako hladat ten prienik, co je vo vseobecnosti pomerne algoritmicky narocna uloha. Tu som nasiel diskusiu okolo toho.

http://stackoverflow.com/questions/2272 … tersection

Je tam aj odkaz na kniznice v Delphi, C++ and C# v ktorej by to uz malo byt predprogramovane uplne vseobecne.

Offline

 

#4 18. 02. 2013 14:32

groover
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Porovnanie dvoch ploch v rovine

↑ Brano:
Urcite budem za ten vzorec rad. :) Uz je to nejaky piatok, co som riesil podobny druh matiky. :D

Offline

 

#5 18. 02. 2013 15:03 — Editoval Brano (18. 02. 2013 15:07)

Brano
Příspěvky: 2673
Reputace:   232 
 

Re: Porovnanie dvoch ploch v rovine

Nech $(x_1,y_1),(x_2,y_2),...,(x_n,y_n),(x_{n+1},y_{n+1})$ su vrcholy n-uholnika znacene proti smeru hodinovych ruciciek, pricom $(x_1,y_1)=(x_{n+1},y_{n+1})$ - ten posledny vrchol je len kvoli jednoduchosti zapisu vzorca. Nech $(x_0,y_0)$ je lubovolny bod. Potom
$S=\frac{1}{2}\sum_{k=1}^n\left[(x_k-x_0)(y_{k+1}-y_0)-(x_{k+1}-x_0)(y_k-y_0)\right]$
Ak by si ho znacil v smere hodinovych ruciciek, tak dostanes minus obsah.
Ak by mal samoprieseky, tak casi obehnute v smere HR prispievaju zapornym obsahom a casti obehnute proti smeru HR prispievaju kladnym obsahom.

$(x_0,y_0)$ si zvol tak aby sa ti to co najlahsie pocitalo, napr.: $(0,0)$ alebo pri $(x_0,y_0)=(x_1,y_1)$ ti vypadne prvy a posledny clen tej sumy, lebo budu nulove.

V skutocnosti je to len aplikacia toho co spominal ↑ martisek: - napisana tak aby sa to lahko programovalo.

Offline

 

#6 18. 02. 2013 15:28

groover
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Porovnanie dvoch ploch v rovine

↑ Brano:
Super, dik moc. :) Mrknem sa na to. :) Problem to bude implementovat do Labview. :) ale ako na to pozeram, tak to nebude az take zlozite. :)

Offline

 

#7 18. 02. 2013 16:12 — Editoval martisek (19. 02. 2013 00:00)

martisek
Příspěvky: 914
Škola: MU Brno
Pozice: učitel, FSI VUT v Brně
Reputace:   52 
 

Re: Porovnanie dvoch ploch v rovine

↑ groover:

Pokud jde o ten průnik, je přece daleko jednodušší spočítat součet obsahů těch čtyřúhelníků (jakoby se nepřekrývaly) a od toho odečíst obsah toho překrývajícího se osmiúhelníka.


Wolfram ani jiný chemický prvek matematiku nenaučí.

Offline

 

#8 18. 02. 2013 16:22

groover
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Porovnanie dvoch ploch v rovine

Ano, ale ja potrebujem percentualne vyjadrit velkost spolocnej plochy vzhladom k jednemu z tych stvoruholnikov. Tak ci onak, stejne potrebujem obsah toho spolocneho stvoruholniku, takze potrebujem stejne poznat body, kde sa pretinaju jednotlive strany. Alebo sa mylim?

Offline

 

#9 18. 02. 2013 17:12 — Editoval Brano (18. 02. 2013 17:13)

Brano
Příspěvky: 2673
Reputace:   232 
 

Re: Porovnanie dvoch ploch v rovine

↑ martisek:
Nevidim dovod preco by malo byt zjednotenie jednoduchsie ako prienik. Ak su zadane dve stvorice bodov tak aky bude algoritmus na ich zjednotenie. Dokonca to ani nemusi byt n-uholnik. Moze sa jednat napriklad o 12-uholnik, ktory ma vyrezany stvoruholnik zvnutra, napr.:
$(1,1),(-2,0),(1,-1),(-1,0)$
$(-1,-1),(2,0),(-1,1),(1,0)$
prienik su dva stvoruholniky.

Offline

 

#10 18. 02. 2013 18:01

martisek
Příspěvky: 914
Škola: MU Brno
Pozice: učitel, FSI VUT v Brně
Reputace:   52 
 

Re: Porovnanie dvoch ploch v rovine

↑ Brano:

No jo, ale oba jsou nekonvexní,  groover je má konvexní. Takže by bylo by třeba upřesnit, zda se má počítat i s nekonvexními...


Wolfram ani jiný chemický prvek matematiku nenaučí.

Offline

 

#11 18. 02. 2013 18:32

Brano
Příspěvky: 2673
Reputace:   232 
 

Re: Porovnanie dvoch ploch v rovine

Konvexnost je skor argument pre pocitanie prieniku, lebo prienik konvexnych polygonov je konvexny polygon, zatial co zjednotenie konvexnych stvoruholnikov moze byt napr. nekonvexny 16-uholnik. Ale to je v podstate dost jedno. Nejaky vseobecny algoritmus aj na jedno aj na druhe bude podla mna rovnako zlozity, sam som si ho nepozeral, ale nevidim dovod preco by malo byt zjednotenie nejak jednoduchsie.

Ak by sa to robilo napr. cez nerovnice, tak konvexny n-uholnik je prienik rieseni n linearnych nerovnic. Teda prienik dvoch n-uholnikov je riesenie 2n linearnych nerovnic a treba najst ktore z nich su nadbytocne. Zatial co zjednotenie by bolo dost komplikovane a v pripade nekonvexneho zjednotenia nam takyto pristup vobec nepomoze.

Offline

 

#12 18. 02. 2013 19:02

groover
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Porovnanie dvoch ploch v rovine

Ak si spravne pamatam definiciu konvexnosti, tak konvexne teleso je take, kde usecka spajajuce lubovolne dva body leziace vo vnutri telesa lezi cela v tomto telese, je to tak? Ak ano, tak telesa budu len konvexne. :) program zatial pocita len so 4-uholnikmi, ale mozu sa tam vynimocne objavit aj nepravidelne 6-uholniky. Predpokladajme ale zatial riesenie len so 4-uholnikmi. :)

Offline

 

#13 19. 02. 2013 12:10

groover
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Porovnanie dvoch ploch v rovine

Tak, problem sa dost zjednodusil. :) Momentalne Labview obsahuje funkciu pocitania obsahu N-uholnikov. Takze momentalne uz potrebujem len najst body, kde sa pretinuaju jednotlive strany oboch stvoruholnikov.

Offline

 

#14 19. 02. 2013 12:29

Brano
Příspěvky: 2673
Reputace:   232 
 

Re: Porovnanie dvoch ploch v rovine

↑ groover:
vskutocnosti sa moc nezjednodusil - to som hovoril od zaciatku
pocitanie obsahov je trivialne
vyjadrenie prieniku je tazke

zatial odporucam skusit si pozriet tu diskusiu na ktoru som dal link. Ja este mozem porozmyslat ako by sa to robilo cez tie nerovnosti ako som pisal, ale kedze netusim ake moznosti ma labview tak tazko povedat.

skus este opisat ako ma vyzerat vsup a ako vystup. predpoklodam, ze program by mal fugovat bez dodatocneho vstupu pouzivatela ako napriklad, ze by klikal na prieniky, alebo nieco podobne...

da sa tam pocitat v cykloch, ako v C++ alebo Basic?

Offline

 

#15 19. 02. 2013 12:47

JohnPeca18
Příspěvky: 651
Škola: MFF UK
Pozice: Absolvent 2014
Reputace:   81 
 

Re: Porovnanie dvoch ploch v rovine

↑ Brano:
Podľa mňa, keď tam má len konvexné útvary, tak skutočne mu stačí nájsť len body, v ktorých sa hrany útvarov pretínajú. A to by nemalo byť ťažké, proste porovnať každú hranu jedného útvaru s každou hranou druhého útvaru, či obsahuje spoločný bod. No a potom vyšetriť len prípad, keď je jeden útvar vložený do druhého. Ako som tak zbežne sa díval na ten odkaz, tak tam je to preto komplikované, lebo sa nejedná o konvexné útvary.

Offline

 

#16 19. 02. 2013 13:10 — Editoval Brano (19. 02. 2013 13:17)

Brano
Příspěvky: 2673
Reputace:   232 
 

Re: Porovnanie dvoch ploch v rovine

↑ JohnPeca18:
jedna vec je najst tie prieniky ako hovoris to si viem predstavit...

dva n-uholniky teda vysetrit $n^2$ prienikov priamok ci sa nachadzaju na useckach (stranach)
... toto budu urcite vrcholy

potom aj niektore povodne vrcholy mozu byt vrcholmi prieniku ... na to staci overit ktore vrcholy n-uholnika A
sa nachadzaju v B a naopak

ale to co mi naozaj vrta hlavou je to, ze len samotne vrcholy asi nestacia este ich treba usporiadat, aby sme vedeli ktore su susedne (na pouzitie vzorca co som pisal)

ak ma aj toto Labview podchytene, t.j. ze staci zadat sadu vrcholov a vypocita obsah konvexneho n-uholnika bez ohladu na to v akom poradi sa zadaju, tak toto co navrhujes by mohla byt najschodnejsia cesta

↑ groover:
skus pozriet, ci je tam nejaka funkcia co by sa zaoberala konvexnym obalom (angl. convex hull)

Offline

 

#17 19. 02. 2013 15:59

groover
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Porovnanie dvoch ploch v rovine

Tak, pekne po poporade. :

1. Vstup a vystup: Na vstupe si vyparsrujem z XML urcitu mnozinu bodov. tie body nie su nahovdne, a kazda stvorica bodov je nejak oznacena a tvori vzdy konvexne teleso. :) A k tejto skupine bodov budem potom hladat inu skupinu bodov, ktora sa plochou zhoduje na vopred stanoveny pocet %. Vystupom bude oznacenie definovaj stvorice bodov, ktora sa plochou zhoduje so zadanou stvoricou na zadany pocet %.

2. Mam moznost overit, ci sa nejaky konkretny bod nachadza mimo, na hrane, alebo vo vnutri definovaneho telesa. funkcia Convex hull tam je. :)

Najskor by som riesil otazku hladania bodov, az potom ich usporiadavanie. :)

Offline

 

#18 19. 02. 2013 16:07 — Editoval Brano (19. 02. 2013 16:08)

Brano
Příspěvky: 2673
Reputace:   232 
 

Re: Porovnanie dvoch ploch v rovine

Ved tam mas predprogramovane skoro vsetko :-)

mas tam aj taku funkciu ktora by nasla prienik dvoch useciek? Pretoze to je uz posledna vec ktoru potrebujes
... v skutocnosti nieco take je pravdepodobne sucast zistovania, ci je bod vo vnutri definovaneho polygonu, takze si myslim, ze by to tam malo byt.

Offline

 

#19 19. 02. 2013 16:35 — Editoval JohnPeca18 (19. 02. 2013 16:44)

JohnPeca18
Příspěvky: 651
Škola: MFF UK
Pozice: Absolvent 2014
Reputace:   81 
 

Re: Porovnanie dvoch ploch v rovine

↑ groover:
No a keby si tam nahodou funkciu na hľadanie prienikov dvoch úsečiek nemal tak sa to dá spočítať:
Prvá usečka nech je $AB$, druhá $CD$
Potom musí platiť
$xA+(1-x)B=yC+(1-y)D$
$0\leq x\leq1,0\leq y\leq 1$

Keď si to rozpíšeš na jednotlivé súradnice, tak vznikne sústava 2 rovníc o dvoch neznámych.
Tu vyriešiš a overíš, či x,y splňujú podmienku.
Konkrétny bod potom dostaneš dosadením za x alebo y do ľavej alebo pravej strany rovnosti.

Ešte ma napadlo, čo keď 2 útvary majú spoločnú hranu, alebo aspoň čiastočne sa na nejakom úseku
hrany zhodujú. Tam treba vziať do úvahy hraničné body prieniku 2 úsečiek. To tiež pôjde určit z tej
rovnice, len bude treba zistiť hraničné hodnoty prieniku riešení sústavy a podmienky na x,y.

Inak poradie vrcholov, asi najjednoduchsie je urobiť na ne convex hull, no keby bola núdza
tak by sa dalo podľa mňa zistit aj z toho v akom poradí ich budeme nachádzať,  to by bolo ale potřeba si rozmyslet ale to by taky šlo.

Offline

 

#20 19. 02. 2013 17:01

Brano
Příspěvky: 2673
Reputace:   232 
 

Re: Porovnanie dvoch ploch v rovine

JohnPeca18 napsal(a):

↑ groover:
Ešte ma napadlo, čo keď 2 útvary majú spoločnú hranu, alebo aspoň čiastočne sa na nejakom úseku
hrany zhodujú. Tam treba vziať do úvahy hraničné body prieniku 2 úsečiek. To tiež pôjde určit z tej
rovnice, len bude treba zistiť hraničné hodnoty prieniku riešení sústavy a podmienky na x,y.

to by mala zachytit ta funkcia co overuje, ci je bod vnutri/na hrane utvaru
v podstate nas zaujimaju len prieniky takych hran co su roznobezne.

Offline

 

#21 19. 02. 2013 17:31

groover
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Porovnanie dvoch ploch v rovine

Brano napsal(a):

Ved tam mas predprogramovane skoro vsetko :-)

mas tam aj taku funkciu ktora by nasla prienik dvoch useciek?

No, moznosti su sice siroke, ale akonahle tam nieco nie je, tak si to clovek musi doprogramovat, a to nie je celkom prdel niekedy. :)

Keby tam ta funkcia bola, tak by to bolo super, ale nie je, bohuzial...

Dakujem za rady, idem sa na to hned pozriet. :)

Offline

 

#22 22. 02. 2013 12:31

groover
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Porovnanie dvoch ploch v rovine

Dakujem vsetkym za pomoc. :) Nakoniec som to vyriesil upgradom na najnovsie labview, ktore ma vstavanu funkciu Convex Polygon Intersection. :)

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson