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
Pracuji na programu, který zjišťuje souřadnice pravidelného polygonu, jehož vrcholy leží na pomyslné kružnici. Pro vytvoření bodů polygonu je třeba určit velikost kroku ve stupních a zadat poloměr. Počáteční souřadnice, střed kružnice je 0,0. Nyní se snažím řešit situaci, kdy krokování není násobkem úhlů, které jsou svírány mezi 0° a a vrcholem polygonu.
TERMINOLOGIE
Zase musím zavést nějakou terminologii, kterou používám ve svém programu.
cyklus - celý program pracuje v cyklech, tedy abych mohl vytvořit jeden bod, musí výpočet projít jedním cyklem
sides - počet stran polygonu
stepSize - velikost kroku nebo-li navyšování pro jeden cyklus.
n - číslo kroku
degree nebo angle - aktuální úhel se kterým se pracuje v cyklu - je to název proměnné, která se vypočítá jako angle = n*stepSize
segment neboli strana - 360/sides
vertex - bod je vrcholem když angle je dělitelné segmentem bezezbytku ... mod (angle, segment) = 0
diff - rozdíl dvou úhlů když porovnávám úhel vrcholu a aktuální úhel na stěně polygonu.
souřadnice - souřadnice bodů ležících na stranách polygonu se počítají pomocí funkce polygon(sides, radius, angle), jejich výpočet není předmětem tohoto vlákna a vrcholy jsou mi už známé z výpočtu.
PŘÍKLAD
Tedy příklad se, kterým se nyní pokouším pracovat:
Chci polygon o 4 stranách (čtverec). Úhel mezi výchozím bodem a prvním vrcholem je logicky 90°. Krokování si zvolím 31°. Tedy již v druhém kroku musím zjišťovat jestli v následujícím kroku je číslo n*stepSize větší než 90°. Pokud je větší, pak vypočítám rozdíl těchto dvou čísel. V mém případě u třetího kroku bude 3°. Jelikož je to číslo kladné, ale jsem stále v druhém kroku, tedy zatím jsem na 62°, vím že další bod nechci mít 93° ale 90°.
Naopak, kdybych měl krokování 29°, bylo by ve třetím kroku pouze 87°, ale chci mít souřadnici vrcholu takže je-li rozdíl těch dvou čísel záporný, pak musím přičíst ten rozdíl, abych dostal 90°.
Tahle podstat zdá se mi jasná, jenže problém se kterým si neumím poradit (ach jo, prostě mi to počítání nejde :-/ ) je když bude těch kroků více a krokování bude větší, tedy v případě čtverce se dostaneme například do druhé, třetí nebo nebo čtvrté čtvrtiny. Jak tedy definovat ty podmínky (definiční obor?) a jak spočítat správně rozdíl, abych získal vertex na správném místě?
Offline
a na co vlastne tam mas tie kroky? co konktretne ma ten program robit? ak ma iba zistit suradnice vrcholov pravidelneho n-uholnika na jednotkovej kruznici, tak to su.
pre
kde si mozes zvolit lubovolne a rozhoduje o natoceni n-uholnika.
Offline
Brano, tohle vlákno není o vytvoření polygonu. Na to jsem se už ptal zde a postup jsem obdržel. Vrcholy polygonu znám, ty počítám 360/sides neboli 360° děleno počet stran.
Cíl tohoto vlákna
Cílem je vypočítat okamžik, kdy je třeba opravit aktuální pozici na pozici vrcholu. Tato situace nastává v případě, kdy velikost krokování [°] nesedí s velikostí úhlu vrcholu, takže se ty dva body nesetkají ve stejném místě. Jde mi tedy o to posunout ten nesprávný bod na pozici vrcholu.
Ty kroky to je to postupné vypisování bodů na polygonu. Na co jsou, viz vlákno na co jsem odkázal. Ten polygon nemusí být spojitý, jedná se pouze o body, které jsou rozeseté po obvodu polygonu buď řidce nebo hustě.
Co ve tvém vzorci znamená k? To je jako ten krok? Nebo jestli to je poloměr tak proč nepoužiješ zaběhlé r? To jsou věci, které mě matou, že tu lidi uvádí pořád nějaké písmena ve vzorcích co nevím co znamenaj, můžete místo těch písmen dosadit ty moje proměnné ať je to jasné a nemusím se pořád doptávat?
Pro zjištění nejvhodnějšího okamžiku kdy je třeba opravit bod na pozici vertexu jsem zkusil tento postup - je nedokončený:
sides=4
segment=90°
stepSize=29°
n := 2
decision_point=segment/2=45° ;
abs(diff) - funkce vrací absolutní hodnotu čísla
diff= 90 - (29*3) = 90 - 87 = 3
diff := ( segment - ( stepSize * (n+1))
; use this coords to set next vertex
if ( abs(diff) < decision_point)
{
}
else ; use this coords to set previous vertex
{
}
---------------------------------------------
stepSize=31°
n := 2
decision_point=45°
diff= 90 - (31*3) = 90 - 93 = -3
diff := ( segment - ( stepSize * (n+1))
; use this coords to set next vertex
if ( abs(diff) < decision_point)
{
}
else ; use this coords to set previous vertex
{
}
---------------------------------------------
stepSize=50°
n := 2
decision_point=45°
diff= 90 - (50*3) = 90 - 150 = -40
diff := ( segment - ( stepSize * (n+1))
else ; use this coords to set next vertex
if ( abs(diff) < decision_point)
{
}
else ; use this coords to set previous vertex
{
}
---------------------------------------------
stepSize=27°
n := 3
decision_point=45°
diff= 90 - (27*4) = 90 - 108 = -18
diff := ( segment - ( stepSize * (n+1))
else ; use this coords to set next vertex
if ( abs(diff) < decision_point)
{
}
else ; use this coords to set previous vertex
{
}
---------------------------------------------
stepSize=27°
n := 5
decision_point=45°
diff= 90 - (27*6) = 90 - 162 = -72
diff := ( segment - ( stepSize * (n+1))
else ; use this coords to set next vertex
if ( abs(diff) < decision_point)
{
}
else ; use this coords to set previous vertex
{
}
Vypočítávám střední hodnotu úhlu 90°, abych zjistil kde se pohybuje ten následující bod, který má být buď těsně před 90° nebo těsně za 90°. Ale tuhle podmínku tam ještě nemám zabudovánou takže musím opravit. A druhý nedostatek toho vzorce je v tom, že mi právě od toho posledního případu nastává situace, že číslo diff bude vždy už jen větší, což je špatně. Potřebuji se rozhodnotu jestli opravit souřadnici směrem k následujícímu nebo k předchozímu vrcholu.
Možná bych měl zrušit absolutní hodnotu a definovat podmínku nově?
; Rozdíl je kladné číslo do 45°
if ( 0 < diff < decision_point )
{
}
; Rozdíl je záporné číslo do -45°
if ( 0 > diff > decision_point*-1 )
{
}
Ale jak pak spočítat rozdíl, aby nevyšlo větší číslo než 45°?
Navíc podmínka musí vyhovovat i pro malé kroky např. krokování po 4°. Tzn. 22. krok leží na 88° a protože následující bod má leže na 92°, proto během 22. kroku musím vytvořit ještě jeden bod na 90°.
Offline
↑ buff:
Zdravím,
kolega ↑ Brano: vytváří vrcholy na jednotkové kružnici, tedy . Pokud bys chtěl libovolnou kružnici, tak se vzorec upraví na tvar
a
.
je počáteční úhel natočení čtverce (bude nenulové, pokud "první vrchol neleží na ose x ale někde výš nebo níž). Hodnoty ve vzorci jsou v radiánech. Hodnotu k zvolíš jen k=0, dostaneš souřadnice prvního vrcholu v počáteční poloze, a k=1,2, 3 pro ostatní vrcholy čtverce (zde editováno).
n=4, najdeš vrcholy čtverce. Teď krokování - jelikož víš, že jednotlivé vedlejší vrcholy čtverce spolu se středem kružnice tvoří úhel 90 stupňů, třeba krokovat tak, aby do 90 vešlo celé číslo kroku, tedy dělitelem 90, což je 90, 45, 30, 15, 10, 9, 5, 3, 2, 1, můžeš pokračovat i díly jako 0,5, 0,3 atd. Pravděpodobně pro začátek stačí např, krokovat po 10 stupních, na kružnici pomocí toho nakreslíš 8 pomocných vrcholů.
Bohužel ale jiné krokování, jak jsi napsal v předchozím příspěvku, povede k tomu, že přes vrchol přeskočíš, nebo nedojdeš. Záleží, zda nevadí, že zeď bude trošku kratší, poslední "ještě bod" dostavíš, budeš ho považovat za nový vrchol čtverce a od něho opět vypočteš další polohu vrcholu. Takové křivé opevnění. To znamená, že po každé jedné straně se tobě změní počáteční úhel ve vzorci od Brano.
Nebo striktně dodržuj dělitele.
Když máš body vrcholů čtverce, můžeš sestavit rovnice strany čtverce - to jsme dělali v předchozím tématu . A teď jsme tam, kde jsme již byli - buď rozdělíš úsečku "x_next+x_previous" na kousky a příslušné x dosadíš do rovnice přímky - najdeš y-souřadnice.
Nebo budeš sestavovat rovnice přímek ze středu na body na kružnice, takové rovnice budou mít tvar . Potom hledat průsečík těchto přímek a přímek stran.
Zde je N=0, 1, 2, 3.... a značí počet malých kroků od počáteční polohy úhlu. Všechno v radiánech.
Rozumíš tomu tak - v čem je problém s krokováním, pokud nevytvoří celých 90 stupňů?
Offline
Mě přijde, že vše co píšeš je úplně zbytečné. Já nepotřebuju rotovat ten čtverec a když ho chci rotovat tak ho rotuji s tím není žádný problém. Také samozřejmě vím, že mohu krokování nastavit tak aby vše pasovalo. Ale mě jde nyní o vyřešení této alternativy, kdy krokování nepasuje. Další věc - já nepotřebuju počítat vrcholy, protože ty znám. Ani strany nepotřebuju počítat. To o co jde je vypočítat ten správný okamžik, jak ho rozpoznat, jak rozpoznat kdy dochází k tomu momentu, kdy chci provést tu změnu. Jako snažil jsem se to napsat jasně a stručně, a s formulováním jsem si dal dost práce, takže nevím proč mi nikdo nerozumí. Problému rozumím, ale zasekl jsem se na bodě, kdy mám přesně definovat ten správný okamžík, kdy je třeba provést určitou změnu. V momentě kdy budu mít definici tohoto momentu, jsem schopen si všechny změny provést.
Nejdůležitější faktory co chápu a umím si vypočítat jsou tyto:
- posuzuji následující bod (n+1), ne ten aktuální. Také jeho úhel znám a posuzuji ho s toleranční hranicí, kterou nazývám decision_point - bod rozhodnutí, který podle podmínky, kterou jsem si určil, rozhodne o tom kde změnu provedu - tj. v předchozím nebo následujícím bodě. To slouží k posouzení vzdálenosti od vrcholu takže decision_point zde je 45°.
Co mi schází je správná definice toho okamžiku, ale tato definice nemá vycházet ze souřadnic, ale z kroků a úhlů na té kružnici.
Offline
↑ buff:
dobře, máš zvolen krok 31 stupeň, kontrolní body jsou vrcholy na 0 (start) a 90, 180, 270, 360 (konec=0).
Začneš na 0 a projdeš 31 stupňů, zkontroluješ rozdíl 90-31. Pokud je větší, než 31, pokračuješ dalším krokem na 31. Tak ujdeš k kroků po 31.
Pokud je rozdíl (90-k*31)<31 (k je počet dosud splněných kroků), potom další bod nebude odpovídat 90 a je to nový výchozí bod pro další segment.
Opět jdeš po 31 stupních a kontroluješ zda (180-k*31)>31. Když to přestane platit a po předchozím kroku je (180-k*31)<31, "next bod" bude 180.
Potom do 270, potom do 360.
Tak jsi to myslel?
Offline
jelena napsal(a):
↑ buff:
dobře, máš zvolen krok 31 stupeň, kontrolní body jsou vrcholy na 0 (start) a 90, 180, 270, 360 (konec=0).
Začneš na 0 a projdeš 31 stupňů, zkontroluješ rozdíl 90-31. Pokud je větší, než 31, pokračuješ dalším krokem na 31. Tak ujdeš k kroků po 31.
Pokud je rozdíl (90-k*31)<31 (k je počet dosud splněných kroků), potom další bod nebude odpovídat 90 a je to nový výchozí bod pro další segment.
Opět jdeš po 31 stupních a kontroluješ zda (180-k*31)>31. Když to přestane platit a po předchozím kroku je (180-k*31)<31, "next bod" bude 180.
Potom do 270, potom do 360.
Tak jsi to myslel?
Aha, tak ty vlastně vůbec nechápeš jak jsem to myslel. bylo tam n=2 a ve vysvětlivkách v prvním příspěvku, že n je krokování. Tedy když n je 2, tak to znamená že jsem ve druhém kroku a úhel je ... to ale není podstatné kolik je úhel ve druhém kroku. Protože když se podíváš co v druhém kroku počítám a co chci porovnat:
diff := ( segment - ( stepSize * (n+1))
Tak z n+1 vyplývá, že mě zajímá třetí krok.
Takže ještě jednou. Pro příklad s 31°, ve druhém kroku chci porovnávat třetí krok (tedy ten následující). Protože 3x31=93°. A tu mě zajímá rozdíl 93-90 je 3°. Vím, že 3° je malá odchylka, ale je to chyba. By byla splněna první podmínka.
Celý problém je ale v tom, že porovnávání nastává i když je krok v rámci daného rozsahu*, při n=1 nepotřebuju porovnávat protože vím že jsem ještě nedošel k vrcholu. * - nejde totiž jen o porovnávání ale i o to, že důsledkem vyhodnocení podmínky je akce, která provádí změny souřadnic.
Ve skutečnosti je to ještě o něco složitější, ale když to zjednoduším takto, tak potřebuju vědět jak to omezit, jakou podmínku přidat, aby neproběhla ta změna souřadnic nebo vytvoření nového bodu v nesprávný okamžik. Jinak by se změny aplikovaly na všechny body a výsledkem by bylo příliš málo souřadnic (respektive byly by hodně souřadnic, ale všechny by odpovídaly čtyřem bodům). Např. při malém krokování po 4° by se vytvořili jakoby jen 4 vrcholové souřadnice, protože by se všechny body přesunuly někam na kraj, na některý z těch vrcholů.
Offline
↑ buff:
No, sice ti taky moc nerozumím, ale jestli chceš obcházet ten polygon a když dojdeš blízko k vrcholu, tak se s ním srovnat, tak by to nemělo být zas tak těžké. Budu psát jen o úhlech.
Krokuju si úhel od nuly po malém kroku. Někam si uložím úhel nejbližšího vrcholu (vrchol). Jakmile můj úhel padne do intervalu (vrchol-krok/2;vrchol+krok/2), přepíšu ten svůj úhel tím správným (vrchol). Do proměnné vrchol uložím úhel dalšího vrcholu a pokračuju dalším přičítáním kroku. To bude dělat něco podobného co ty asi chceš, možná dokonce i pro krok větší než je rozestup vrcholů (pak by to asi vykreslilo jen ty vrcholy).
Offline
↑ LukasM:
No já myslel že by to mělo jít vypočítat. S ukládáním je problém v tom, že čím více ten polygon má strana, tak tím složitější by bylo ukládat pozice vrcholů a pokaždé porovnávat daný body se všemi vrcholy. Tak doufám, že na toto existuje nějaké matematické řešení, které vložím do jedné podmínky a nepotřebuju tím pádem nic ukládat a tvorbu mnoha podmínek. Stále věřím že na to nějaké řešení být musí. Přeci mezi tím krokem a vrcholem je nějaká přímá matematická souvislost.
Offline
↑ buff:
Proč ukládat a porovnávat všechny? Když chci malovat n-úhelník, tak se vrcholy liší o úhel . Díky tomu taky funguje ten vzoreček od Brana. Takže začnu na nule, první vrchol má úhel
. Když k němu dojedu a srovnám se s ním, tak k tomu číslu přičtu zase
. Atd. To je snad jasné že když dělám čtverec a mám úhel k jednomu vrcholu, tak ten další má úhel o
větší, ne?
A mezi krokem a vrcholem žádná matematická souvislost není, oboje si volíš.
Offline
↑ buff:
Nechápu co chceš vyřešit.
Jestliže vrcholy polygonu znáš, tak si je dej do nějakého pole, a pak už tě nemusí zajímat jestli je krok soudělný s 360 stupni pro počítání dalších bodů na stranách n-úhelníka.
A až budeš ty body vykreslovat, (ale ty někde jinde píšeš, že je nechceš vykreslovat, i když na jiném místě píšeš, že chceš dělat hradby a celé armády) tak vykreslíš jak ty spočítané body s nesoudělným krokem, tak potom i ty vrcholy nebo vrcholy zařadíš do pole nesoudělných bodů.
Ovšem proč to dělat jednoduše, když to jde složitě, že? Pořád se domnívám, že nejjednoduší je mít spočítány pouze vrcholy n-úhelníka a ty pak spojovat úsečkami.
Řešení tvého problému:
Pro čtyřúhelník: segment=90°, stepSize=29°
První bod bude první vrchol n-úhelníka.
Pak zavedeš pomocnou proměnnou i a na začátek ji nastavíš na i := 1.
Teď budeš procházet cyklus a porovnávet:
if (n*stepSize<i*segment)
{
.... vypočítej bod na hraně
}
else
{
i := i+1 (zvětši i o jedna)
.... use coords next vertex (použij i-tý vrchol pravidelného n-úhelníka)
}
Offline
Aha, tak díky Lukášovi a Honzovi jsem konečně pochopil smysl toho Branova vzorce (tedy alespoň tu část kde je 2Pí * k / n. Tedy jestli jsem ho opravdu pochopil správně, tak písmeno k je číslo segmentu neboli strany.
Tedy co bych očekával, aby mě to bylo snadno pochopitelné je vzorec
360/sides*segment
A rozklíčování je tedy v Honzově příspěvku, když mi ukázal jak navyšovat a pamatovat ty vrcholy, nebo jak to bylo myšleno.
Tedy
if (n*stepSize<i*segment) { .... vypočítej bod na hraně } else { i := i+1 (zvětši i o jedna) .... use coords next vertex (použij i-tý vrchol pravidelného n-úhelníka) }
myslím, že to bude fungovat. Jak to dopadlo dám vědět až to bude.
Díky
Mám to takto:
if ( stepSize * (n+1) > 360 / sides * (i+1) )
{
i++
}
31 * (2+1)> 360 / 4 * (0+1) )
93 > 90 = TRUE ... i se navyšuje
31 * (3+1)> 360 / 4 * (1+1) )
124 > 180 = FALSE
31 * (4+1)> 360 / 4 * (1+1) )
155 > 180 = FALSE
31 * (5+1)> 360 / 4 * (1+1) )
186 > 180 = TRUE ... i se navyšuje
31 * (6+1)> 360 / 4 * (2+1) )
217 > 270 = FALSE
31 * (7+1)> 360 / 4 * (2+1) )
248 > 270 = FALSE
31 * (8+1)> 360 / 4 * (2+1) )
279 > 270 = TRUE ... i se navyšuje
31 * (9+1)> 360 / 4 * (3+1) )
310 > 360 = FALSE
31 * (10+1)> 360 / 4 * (3+1) )
341 > 360 = FALSE
31 * (11+1)> 360 / 4 * (3+1) )
372 > 360 = TRUE
Offline
Zdravím v tématu
kolega buff mně napsal(a):
Aha, tak ty vlastně vůbec nechápeš jak jsem to myslel.
:-) V čem, prosím, principiální rozdíl mezi návrhem
Jelena napsal(a):
Začneš na 0 a projdeš 31 stupňů, zkontroluješ rozdíl 90-31. Pokud je větší, než 31, pokračuješ dalším krokem na 31. Tak ujdeš k kroků po 31.
Pokud je rozdíl (90-k*31)<31 (k je počet dosud splněných kroků), potom další bod nebude odpovídat 90 a je to nový výchozí bod pro další segment.
Opět jdeš po 31 stupních a kontroluješ zda (180-k*31)>31. Když to přestane platit a po předchozím kroku je (180-k*31)<31, "next bod" bude 180.
Potom do 270, potom do 360.
a Tvým návrhem v ↑ příspěvku 12:? V ničem, až na formu zpracování.
buff napsal(a):
Aha, tak díky Lukášovi a Honzovi jsem konečně pochopil smysl toho Branova vzorce (tedy alespoň tu část kde je 2Pí * k / n. Tedy jestli jsem ho opravdu pochopil správně, tak písmeno k je číslo segmentu neboli strany.
ano, pochopil jsi ho správně, stejné vysvětlení mám v příspěvku ↑ č. 4: hned po vzorci s doplněným poloměrem. Ovšem tento vzorec ve Tvém problému již nijak nepůsobí, jelikož vzorec je určen jen na výpočet souřadnic vrcholů polygonu na kružnici.
Další zdary přeji a kolegům ↑ LukasM:, ↑ Honzc: děkuji za ochotné působení.
Offline
jelena napsal(a):
:-) V čem, prosím, principiální rozdíl mezi návrhem
Jelena napsal(a):
Začneš na 0 a projdeš 31 stupňů, zkontroluješ rozdíl 90-31. Pokud je větší, než 31, pokračuješ dalším krokem na 31. Tak ujdeš k kroků po 31.
Pokud je rozdíl (90-k*31)<31 (k je počet dosud splněných kroků), potom další bod nebude odpovídat 90 a je to nový výchozí bod pro další segment.
Opět jdeš po 31 stupních a kontroluješ zda (180-k*31)>31. Když to přestane platit a po předchozím kroku je (180-k*31)<31, "next bod" bude 180.
Potom do 270, potom do 360.a Tvým návrhem v ↑ příspěvku 12:? V ničem, až na formu zpracování.
Prosím tě, z toho tvého textu jsem úplně zmatený.
Proč píšeš o "k" jako počtu kroků, když jsem hned na začátku psal, že počet kroků je n?.
Proč píšeš 90-31 když 31*(n+1) je minimálně 62 ne 31? To mě dovedlo k závěru, že si to nepochopila. Nenapsala si to celé takže jsem nevěděl a nevím to dodnes, o které straně vzorce mluvíš. Tvůj vzorec neobsahuje to navyšování na pravé straně a z toho důvod u mi to přijde jako nesmysl.
Ten můj vzorec je:
stepSize * (n+1) > 360 / sides * (i+1)
Na levé straně je stepSize * (n+1) ale zde "n" označuje počet kroků. Taky nechápu proč tam máš odečítání. Celé mi to tvoje řešení nedává smysl. Honza to napsal jasně v kódu, díky tomu, že napsal kompletní podmínku a k tomu ještě napsal co se má dít když je podmínka splněna přímo v tom kódu. Což je pro mě to samé jako pro tebe matematický vzorec. Ale čistě matematický vzorec je pro mě vždycky potíž, ještě kdy tam jsou jen písmena a nejsou důkladně pojmenované proměnné. Na tom padá celé moje chápání matematiky.
Offline
↑ buff:
Nesnaž se pořád někomu vnucovat svoje značení. Jelena, pokud jsem v té rychlosti neudělal chybu při porovnávání, to má dobře. To co navrhoval Honzc je taky dobře, ale trochu něco jiného - rozdíl je v tom, že Jeleny postup srovná s vrcholem ten bod, který je "před" vrcholem. Honzcův postup ten, který je "za" vrcholem. To co jsem naopak navrhoval já by mělo srovnat bližší z obou dvou.
Tak se podíváme na tvůj slavný vzorec:
stepSize * (n+1) > 360 / sides * (i+1)
Jelena psala speciální případ pro stepSize=31, i=0 a sides=4. Tak jak to dopadne když dosadíme:
Jelena psala: "(90-k*31)<31 (k je počet dosud splněných kroků)". Kde je problém? Že si Jelena označila počet kroků k? No a co, vždyť hned za tím je napsané co to k znamená, ne?
Tvou větu "ještě kdy tam jsou jen písmena a nejsou důkladně pojmenované proměnné" zrovna tady opravdu nechápu, když je v tom vzorci jediné písmeno a co znamená je napsané za tím. Branovi jsi to vyčetl taky, a ten to měl také označené všechno (psal že dělá n-úhelník (tedy n=počet vrcholů), k že je přirozené od nuly do n-1 (tedy čísluje vrcholy), libovolné rozhoduje o natočení).
Offline
LukasM napsal(a):
↑ buff:
Nesnaž se pořád někomu vnucovat svoje značení.
Tak si pak nestěžujte že je se mnou těžká domluva. Já potřebuju mít jasně danou terminologii a ne to pořád měnit, jen mě tím matete.
Offline
↑ buff:
Je mi líto, ale to je tvůj problém. Tak to prostě chodí, různí lidé značí různé věci různě, a pokud napíšou co čím myslí (a v tomhle vlákně to tak bylo, viz zbytek mého příspěvku), tak je to ok. Zkus si otevřít několik různých učebnic, a také to nebude všude stejné. Už jsem toho přečetl dost na to, abych ti mohl říct, že jediné co můžeš dělat je to přijmout. V prváku na FJFI jsme měli dva předměty lineární algebry které se překrývaly, a oba učitelé značili stejné věci různě. V matematice jde o něco jiného než jak se co jmenuje, to totiž není podstatné.
Prostě když někdo napíše že bude dělat n-úhelník, tak je lepší se tomu přizpůsobit a poslechnout si co s ním bude dělat, než mu vyčítat že nedělá k-úhelník. Pokud se přes to nemůžeš přenést, tak přece není takový problém si to opsat, a místo n všude napsat k.
Jinak na těžkou domluvu si tu nikdo kromě tebe moc nestěžuje, takže to nám nemusíš vyčítat.
Offline
LukasM napsal(a):
↑ buff:
V matematice jde o něco jiného než jak se co jmenuje, to totiž není podstatné.
...
Jinak na těžkou domluvu si tu nikdo kromě tebe moc nestěžuje, takže to nám nemusíš vyčítat.
Proto nesnáším matematiku právě pro její nesrozumitelnost. Co píšeš, že si nikdo nestěžoval není pravda, ale to bylo v jiném vlákně. Není pravda že mi nezbývá nic jiného než to přijmout. Tady totiž nejde jen o tu matematiku ale o komunikaci a komunikace je i o přizpůsobování komunikačním schopnostem toho druhého. Takže když někdo nerozumí, asi nemá smysl mluvit stále dookola stejným jazykem. Jestli to nechápeš, pak očividně je tu druhá možnost a to že spolu prostě nebudeme my dva komunikovat, tím se to zjednoduší a vyřeší.
Offline
Zdravím v tématu,
a) "stěžování" na fóru rozumím stížnost poslanou Moderátorům pomocí tlačítka Nahlásit, do tématu Přivolej, nebo jinou formou (PM, mail Moderátorovi) a stěžovat se dá na nedodržení pravidel nebo na nefungující funkci fóra (u Administrátora). O něčem takovém nevím. Tedy nikdo se nestěžoval (případně mne jiný Moderátor opraví, zda stížnost byla).
b) v jiných tématech kolegy buff se skoro vždy narazilo na problém s terminologii, se způsobem práce s teoretickými materiály, tento problém je samozřejmě oboustranný. Na můj pohled toto zpracování problému je již přehledné a srozumitelné. Zda téma najde nebo nenajde svého čtenáře, to bohužel nijak ovlivnit nemůžeme.
úplně komentář k mému diskutovanému příspěvku - zrovna jsem použila téměř slovní popis, který můžeš s ohledem na techniku programování převést do svého kódu.
Jelena napsal(a):
Začneš na 0 a projdeš 31 stupňů, zkontroluješ rozdíl 90-31. Pokud je větší, než 31, pokračuješ dalším krokem na 31.
buff napsal(a):
Proč píšeš 90-31 když 31*(n+1) je minimálně 62 ne 31?
protože pokud začnu na 0 a projdu 31 stupňů, tak ujdu jen n=1 krok v souladu s Tvým prvním příspěvkem:
buff napsal(a):
stepSize - velikost kroku nebo-li navyšování pro jeden cyklus.
n - číslo kroku
a jak ukázal kolega Lukáš M., oba mluvíme o stejném pohledu.
Jinak mám to potěšení ve své pracovní a mimopracovní kariéře věnovat se zprostředkování komunikace mezi různými požadavky (např. odborníků v oborů, ale neprogramátorů směrem, k programátorům a zpět, zákazníků k technikům a zpět a i když vezmu jen jazykové překlady a tlumočení), no jsou to dobré zkušenosti :-). Tím bych plynule navázala, že tento závěr považuji za zbytečný:
buff napsal(a):
Jestli to nechápeš, pak očividně je tu druhá možnost a to že spolu prostě nebudeme my dva komunikovat, tím se to zjednoduší a vyřeší.
a věřím, že budete rozumně komunikovat.
K tématu: abych řekla pravdu, tak mně osobně uniká, jak se naloží s touto části programu (krokování a "operativní změna" úhlu) k vytváření bodů na straně polygonu a následně ke stavbě opevnění? Děkuji.
Offline
jelena napsal(a):
Tím bych plynule navázala, že tento závěr považuji za zbytečný:
buff napsal(a):
Jestli to nechápeš, pak očividně je tu druhá možnost a to že spolu prostě nebudeme my dva komunikovat, tím se to zjednoduší a vyřeší.
a věřím, že budete rozumně komunikovat.
K tématu: abych řekla pravdu, tak mně osobně uniká, jak se naloží s touto části programu (krokování a "operativní změna" úhlu) k vytváření bodů na straně polygonu a následně ke stavbě opevnění? Děkuji.
Ten přístup je dvojí a to záleží na člověku. Někdo raději hledá cestu jak se dorozumět pro někoho je jednoduší a příjemnější komunikaci ukončit v případě, že narazím na někoho s kým si vyloženě nesednu a žádná cesta nevede k navázání úspěšného komunikačního kanálu. Ostatně to sama vidíš, když někdo řekne že se nehodlá přizpůsobovat v komunikace té druhé straně, já nevidím důvod proč bych měl v takové komunikaci pokračovat. Patřím k té druhé skupině.
Co se týče operativní změny, tam jde o to buďto přidat bod (souřadnici) nebo upravit souřadnici stávající. Záleži to na vzdálenosti bodu od vrcholu. Samozřejmě si musím vytvořit nějaké měřítko podle kterého posoudím jestli bod je blízko. Celé této funkci kterou tu probíráme říkám force_vertex, neboli vynucení vrcholu. Tvůrce scénáře může například vytvořit stěnu z hradeb (vznikne spojitá stěna), ale místo vrcholů použije věže, nebo použije místo hradeb věže a udělá mezi nimi mezery. Když budou mezery větší, úhel nebude sedět, ale pomocí této automatické korekce si bude moci upravit pozici věže tak aby seděla na vrchol. Dále by mohl na vrchol dosadit odlišný typ věže. U těch věží je výhoda, že by se daly využít například u pentagonu, kdežto pentagon tvořený ze stěn nevypadá dobře kvůli problému zdvojování stěn.
Celé opevnění lze umístit do konkrétní lokace mapy pro každého hráče někam jinam, takže se takto vytváří vše automaticky a přesně bez nutnosti složitě a zdlouhavě propočítávat vzdálenosti v editoru hry.
Offline
↑ buff:
Má rada nebyla myšlena nijak zle. Ber ji jako radu zkušenějšího. Samozřejmě to přijímat nemusíš, a stačí se přestat s ostatními bavit a myslet si jak jsou všichni pitomí. Nic proti tomu, akorát tě to nikam neposune. Že se to zjednoduší, to je pravda - hlavně pro nás co jsme ti chtěli pomoct. Tobě se to naopak zkomplikuje, protože budeš na všechno muset přicházet sám. To žes sem přišel a potřeboval s něčím poradit, to je třeba možný důvod proč hledat možnosti jak se domluvit, nebo ne? Ale když sem přijdeš pro radu, dostaneš odpovědi, a místo aby ses pokoušel je pochopit tak dotyčným opravuješ značení (a ještě říkáš že nevysvětlují písmenka, ačkoli to není pravda), tím dosáhneš asi opravdu jen toho, že se s tebou nakonec nikdo bavit nebude. Můj názor. Myslet si můžeš co chceš.
Proč se vlastně zadává pevně ten krok? Nebylo by lepší zadat počet těch věží co mají být mezi dvěma vrcholy? Pak by si program mohl zvolit krok tak, aby mu to do těch vrcholů vždy vyšlo, a nemusel bys nic dohánět.
Jinak nezapomeň, že stejná úhlová vzdálenost ještě neznamená stejnou absolutní vzdálenost. Když budu mít trojúhelník a otečkuju ho po 10 stupních (od středu), tak budou u vrcholů ty body od sebe dál. Nevím jestli je to pro tebe důležité. U trojúhelníku je to nejlíp vidět, ale tenhle problém bude u všech n-úhelníků.
Offline
Nechápeš že to jde jedním uchem dovnitř a druhým ven? Je zbytečné se o tom bavit. Jo chtěl jsem matematickou radu, ale aby odpověď byla v tom programátorským stylu protože můj mozek nepřijímá jiné podání. Můj mozek zvládá jen obrázky, grafy, diagramy a pak ještě programátorský styl metodou if ( něco ) then ... i++ atd. Nemá smysl to rozebírat. Možná si myslíš že si zkušenější ale nevím co tě k tomu vede. Nemůžeš vymazat desítky let mých zkušeností, takže vím co je pro mě stravitelné a co ne. To se ostatně ukázalo již v předešlých diskusích, že matematické vzorce a písmenka chápu jen velmi těžko.
Offline
↑ buff:
děkuji za upřesnění využití funkce. Jak jsem psala - počítačovým hrám (a jejich programování) nerozumím ani minimum. Ovšem předpokládám, že umístění bodů, objektů apod. je již zpracováno ve formě hotových knihoven - je tak? Ale to bych ani neřešila - je zájem programovat od počátku, no proč ne.
Toto je jiná věc:
buff napsal(a):
Jo chtěl jsem matematickou radu, ale aby odpověď byla v tom programátorským stylu
jenže takový požadavek si vyložím jako "napište mi kus kódu přesně podle mé představy". A to vidíš sám, že v první řadě zatím každý, kdo se zapojil do Tvých témat, začal upřesňováním problému a především rozborem, zda je navrhovaný postup dostatečně efektivní a zdá to nejde jinak.
V tom pravděpodobně bude možná potíž - že se "nechce" jen přepsat do matematického vzorce nebo kódu něco, co se nepovažuje za dostatečně efektivní. Nebo to není dostatečně jasné v souvislostech. Jelikož jde o Tvé know how (a také o čas všech zúčastněných), těžko lze požadovat, abys popsal všechno a zároveň těžko lze slibovat, že to najde odezvu, kterou očekáváš.
Abychom se navzájem jen pořád neobviňovali, jak se navzájem nerozumíme a kdo jaké má bohaté zkušenosti, tak jsou možnosti:
a) někdo z kolegů se ozve soukromou cestou, že s Tebou bude spolupracovat a konzultovat přes jiné kanály,
b) smířit se s faktem, že témata na fóru budou vypadat tak, jak se to dosud jevilo a snad i z takových to témat něco pro sebe vybereš,
c) navrhnete něco lepšího :-)
Zatím zdravím a jdu si rozšířit obzory (pana Černého jsem v Opavě již poslouchala 2x a stoji to za to).
Offline
Mám novou otázku týkající se toho polygonu, ale mi jde o výpočet čtvrtinové délky strany, na základě stejných vstupních proměnných, které jsme tu probrali. Jde mi o to výpočet vzdálenosti mezi prvním a druhým vrcholem a z toho si už vypočítám čtvrtinu této hodnoty. U pravoúhlého trojúhleníku je to jasné tam bych použil (c je délka strany, a a b je poloměr... Ale v případě pětistranného polygonu a více stran?
Edit:
Mám ten trojúhelník SPD (podle Bradova pojmenování SPD ... Střed - První vrchol - Druhý vrchol ) např. s úhlem 60° rozdělit na dva trojúhelníky, abych získal pravé úhly? Je to správný postup? Myslím tím, že nově vytvořenž přímka bude protínat střed přímky PD (tj. přímka začínající na prvním a končícím na druhém vrcholu).
Offline
↑ buff:
Zdravím, záleží na tom, co znáš:
- pokud máš souřadnice vrcholů (x, y), potom použiješ vzorec pro vzdálenost bodů, v odkazu je x-souřadnice bodu A,
je y-souřadnice bodu A.
- pokud máš pravidelný mnohoúhelník a znáš poloměr kružnice opsané, potom spočteš úhel u vrcholu malého rovnoramenného trojúhelníku s vrcholem ve středu kružnice (ze kterých je tvořen polygon) a použiješ kosin. větu.. Vyznáš se tak? Děkuji.
Offline