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
Dobrý deň,
chcel by som poprosiť o pomoc s matematickou úlohou.
V rovine máme N bodov. Máme nájsť najmenší možný polomer takého kruhu, na ktorom leží M z nich,
pričom:
M<=N.
Máme daných N súradníc bodov v rovine.
Príklad:
Máme 3 body (N) a 3 z nich (M) musí ležať v kruhu s čo najmenším polomerom. Ich súradnice sú[-1,-1], [0,1], [1, -1]. Aký je najmenší možný polomer kruhu na ktorom ležia?
Výsledok by mal byť 1,25.
Vedeli by ste mi prosím poradiť postup riešenia?
Ďakujem.
Offline
↑ sio:
No - hľadáš polomer trojuholníku opísanej kružnice.
Stred opísanej kružnice leží na osiach dvoch rôznych tetív kružnice.
Tetiva spája ľubovoľné 2 rôzne body kružnice.
Špeciálny prípad by bol, keby trojuholník utvorený z daných bodov by bol pravouhlý. Asi by som najprv overila túto možnosť.
Offline
↑ sio:
Ahoj, chceš najít algoritmus na nalezení toho poloměru a nebo vzorec?
Algoritmus je např. brual force: Zkusit všechny trojice bodů, opsat jim kružnici, a zjistit, zda takové obsahují alespoň M bodů - a ze všech takových vybrat tu s nejmenším poloměrem. (Lze to nějakými heuristikami vylepšit - např. je-li daná kružnice příliš malá, tak nemá cenu zkoumat trojice z boů v ní obsažených, apod.)
Offline
↑ check_drummer:
To co píšu asi nebude pravda: Tři body ležící téměř v přímce budou mít kružnici opsanou s vlkým poloměrem, ale lze je umístit do kružnice s poloměrem menším...
Offline
Hlouběji jsem nad tím nepřemýšlel, ale nejspíš bude dost zajímavý i případ M=N=3.
Offline
↑ sio:
Vieš, píšeš o najmenšom polomere KRUHU na ktorom všetky ležia.
Myslím, že musí ísť o opísanú kružnicu trojuholníku utvorenom z tých troch bodov.
A možno práve to máš dokázať.
Ale ak máš len zistiť polomer kružnice prechádzajúcej cez v úlohe dané 3 body, tak ten polomer je skutočne 1,25.
Offline
Skutočne, v prípade ktorý som uviedol to je priamočiare riešenie. Žiaľ, číslo N môže byť až 500 bodov a pre M platí M<=N (je to programátorská úloha). Presne tento algoritmus mi napadol, skúsiť všetky možnosti. Okrem toho, že by bol brutálne časovo zložitý, je asi nie korektný. Okrem prípadov, kedy by ležala trojica bodov na priamke (to sa dá ošetriť), by mohla nastať situácia, kedy by jednoducho na kružnici neležali všetky 3 body - domnievam sa, že minimálne jeden tam ležať musí. Nie je možné urobiť nejakú kružnicu v ktorej KRUHU (nemusia na kružnici) sa nachádzajú vrcholy mnohouholníka? Urobil by som konvexný obal a mal by som vrcholy.
Offline
Ahoj ↑ sio:,
Iste konvexna obalka tvojej mnoziny, ako aj "diameter"=priemer jej konvexnej obalky su klucove pojmy na riesenie tvojho problemu.
Offline
ahoj ↑ sio:,
poloměr nejmenšího kruhu, ve kterém leží tři body je
a) polovina vzdálenosti dvou nejvzdálenějších v případě tupoúhlého nebo pravoúhlého trojúhelníka
b) poloměr opsané kružnice v případě ostroúhlého.
Takže algoritmus bych viděl takto:
1) Nastav hledaný průměr na "téměř nekonečno".
2) Procházej všechny možné dvojice bodů
3) Nad průměrem 2) opiš kružnici
4) Je-li v kruhu 3) právě N bodů, přepiš hledaný průměr průměrem aktuálním
5) Je-li po průchodu všech dvojic hledaný průměr menší než téměř nekonečno, úloha končí.
6) Pokud úloha neskončila, procházej všechny možné trojice
7) Trojúhelníku 6) opiš kružnici
8) Je-li v kruhu 7) právě N bodů, přepiš hledaný průměr.
Offline
↑ Honzc:
Ano, ale to ten problém přece řeší - nejmenší kruh, který obsahuje daných N bodů je přeci tentýž, který obsahuje z té N-tice "největší" trojúhelník - stačí tedy kruh obsahující vždy dva (event. tři) body, a pak se podívat, kolik dalších je uvnitř...
PS: Pozor - on nemá najít konvexní obal, on má najít kruh. A to je dost rozdíl...
Offline
Ďakujem,
takže, ak správne rozumiem:
AK má ležať v kruhu so stredom v bode S a polomerom r určitý počet daných bodov, tak 2 alebo 3 z nich budú ležať na kružnici?
Respektíve - Neexistuje ani jeden taký kruh, kde by na kružnici ležal jeden, prípadne ani jeden bod?
A ešte jedna otázka - Nie je možné postup s dvom bodmi vynechať? Bolo by v tom prípade riešenie nekorektné?
Problémom je veľmi vysoká časová zložitosť programu, kedy by sme museli prve kvadraticky skúšať všetky možné dvojice a potom kubicky všetky možné trojice z 500.
Offline
↑ Eratosthenes:
Tvé řešení má jednu malou vadu.
Pokud dané body jsou vrcholy pravidelného N-úhelníku a M=N-1, pak takovým postupem (požadujeme-li aby v kruhu včetně jeho hranice leželo právě M bodů) výsledek nezískáš.
A takových případů, bych řekl, bude víc.
Kdyby v zadání ovšem bylo "... v kruhu (včetně hranice) leží minimálně M bodů..." pak to asi fungovat bude.
Offline
↑ Honzc:
V tom případě má ovšem stejnou "malou vadu" samotné zadání - taková úloha totiž řešení nemá.
Offline
↑ sio:
>> AK má ležať v kruhu so stredom v bode S a polomerom r určitý počet daných bodov, tak 2 alebo 3 z nich budú ležať na kružnici?
Ano.
>> Neexistuje ani jeden taký kruh, kde by na kružnici ležal jeden, prípadne ani jeden bod?
Ne, každý takový je větší než nejmenší - viz modrý a červený ve srovnání s černým:
>> Nie je možné postup s dvom bodmi vynechať?
Bohužel ne - viz černý kruh ("dvoubodový test") může být menší než červený ("tříbodový test")
Offline
↑ sio:
V tom případě tam budou fungovat i ty pravidelné n- úhelníky - viz ↑ Honzc:, ↑ Eratosthenes:
Offline
↑ sio:
>> Riešenie prve všetkých dvojíc a potom trojíc je síce korektné, ale má závadu a tou je štvorrozmerná asymptotická zložitosť.
To není závada. O složitosti algoritmu není v zadání řeč a nic jednoduššího mě nenapadá. Je to lepší, než kdyby byl algoritmus jednodušší a nefungoval by.
>> Ako by som teda urobil kruh v ktorom je konvexný obal?
Přesně tak, jak jsem popsal. Testoval bych nejdřív dvojice a potom trojice, kde sestrojený kruh obsahuje všechny požadované body. Našel bych toto:
Offline
Pardon, zle som to pomenoval - nie je to závada. V skutočnosti sa hovorí aj o zložitosti, ja som ju tu však neuviedol. Nie je uvedená asymptotická zložitosť ale časový limit a to 2 sekundy čo pre 500 bodov odhadujem najhoršie kvadratickú.
Podľa wikipedie sa dá riešiť lineárne. https://en.wikipedia.org/wiki/Smallest-circle_problem
Offline
↑ sio:
>> Podľa wikipedie sa dá riešiť lineárne
No tak to řeš lineárně - co to brání? Já jsem to neštudoval, ale když se tam podíváš na ty obrátky, tak jsou úplně stejný, jako maluju já...
Offline
↑ Eratosthenes:
Nič iné ako lineárne riešenie mi neostáva. To Vaše riešenie má však oproti lineárnemu jednu výhodu - dokáže nájsť kruh pre M z N bodov s rovnakou časovou zložitosťou. Lineárne treba zložitejšie modifikovať. Tak za predpokladu, že to urobím podľa algoritmu z wikipédie - čo by som mal bez problémov vedieť - bolo by správne nasledujúce riešenie?:
Nájdem kruh v ktorom je N bodov (predpokladajme, že to vieme), odstránim bod na kružnici a vytvorím nový kruh na ktorom je N-1 bodov (bez toho ktorý som odstránil), postup opakujem kým nevytváram kruh z M bodov.
Offline
Zdravím,
tady jsem něco zkusil ve wxMaximě: Odkaz
Je to pro 100 náhodných bodů, výpočet je bleskový. Potíž je v tom, že generovaní seznamu vzdáleností trvá asi minutu, což je dáno asi programovacím jazykem (lisp) ve kterém je wxMaxima vytvořena.
Takže asi jen na ukázku.
Online