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 2
Ahoj,
Přehledně shrnuto v příspěvku.
jsem si vědom že to teď asi máte dost živo, ale snad se najde někdo kdo mi poradí. V matematice jsem nikdy nebyl dobrý, ale snažím se najít řešení pro svůj program, který dělám ve volném čase. Zatím jsem si udělal takovou funkci, která vypočítává souřadnice pro obvod kružnice. Teď jsem se rozhodl tuto funkci vylepšit tak, aby uměla zpracovat i čtverec a potom hexagon, okragon atp. Jen na okraj nejdříve vysvětlím jak funguje ta funkce kružnice. Uživatel zdá poloměr (např. 10 pixelů), počáteční bod např. -45°, krokování ve stupních tedy jeden krok bude např. 45°. No a funkce vypočítá jednotlivé body pro dané lokace ... Kdyby to krokování bylo po 1° tak budu mít 360 bodů.
No a teď bych to chtěl upravit nejdříve na čtverec. Tak to je jednoduché, tam platí že když sin úhlu=1 tak x představuje maximální hodnotu která se použije pro ty souřadnice. cos úhlu je 1 tak zase znám ypsilon atd. Takže pomocí podmínek si zjistím potřebné souřadnice, které ta funkce vrací jako výsledek.
No a nyní se dostávám k výpočtu souřadnic. Připravil jsem si několik obrázků. Tak asi nejdříve oktagon:
Pro výpočet toho oktagonu bych teda asi postupoval tak, že bych začal od bodu který je pod úhlem který je násobek 45°. Teď pro ilustraci dejme tomu že chci vypočítat tu modrou stranu (2. obrázek nahoře), neznám ty zelené vzdálenosti x4 a y4 mě zajímá. Vím že tam je pravý úhel a nějaký úhel alfa4 svýraný mezi vodorovnou osou a tím bodem. Dobrá, ale jak vypočítat ty zelené vzdálenosti? Nějak nevím čeho se chytit.
A pak hexagon:
můžeme probrat později.
Offline
Zdravím,
já Tvé téma přesunu do Ostatního. K Tvému programu se zeptám:
- zadáváš vždy střed pravidelného mnohoúhelníku a počet vrcholů. Cílem programu je nalézt souřadnice vrcholů a body na stranách (s nějakým krokem) nebo body (strany) zakreslit nebo něco jiného? Děkuji.
Offline
↑ jelena:
No hlavně aby mi někdo odpověděl když si to téma přesunula.
Ano, střed je vždy známý, tedy souřadnice 0,0.
Cílem programu je nalézt souřadnice vrcholů a body na stranách. Přitom postupuju od 0° až po 360° a 0° je z principu na ose y "nahoře".
Jde mi opět jen o to rozumět matematickému výpočtu a vzorci. Například jestli mi bude stačit jeden vzorec nebo jich budu potřebovat více pro každou výseč jiný vzorec nebo pro každé pi jiný vzorec... S tím že nejspíš bude třeba funkcí sin a cos počítám.
Možná by ten matematický postup bylo možné vysvětlit na čtverci viz 1. obrázek. Tam totiž platí úplně stejné pravidlo, akorád že je to jednodušší, protože čtverec má jen 4 strany.
Offline
Zdravím. Myslíš něco takového?
Trojúhelník:
Offline
Mák:
Přesně to myslím! Jak si to udělal :-) ?
Offline
Já se omlouvám, moje manželka (Marie) má svátek. Musím se jí věnovat. To je krásný úděl dlouholetého manželství.
Posílám pouze zjednodušený program bez komentáře:
k = Pi/180 f = k*u a = k*mod(n*u,360) b = (a-360*k)/n-f c = a/n-f d = (cos(b)*sin(c)-sin(b)*cos(c))*r e = ((cos(c)-cos(b))*sin(f)+(sin(c)-sin(b))*cos(f)) x = (d*sin(f))/e y = (d*cos(f))/e
Vstup:
u - úhel od 0° .. 360°
n - N-úhelník (3 pro trojúhelník atd...)
r - poloměr
Výstup:
[x,y] - vypočtené souřadnice
[funkce mod je modulo]
Offline
↑ mák:
Díky moc.
PS:
Udivuje mě že někdo slaví svátky.
Offline
Mělo by to fungovat i v radiánech? Kvůli funkcím sin a cos to musím převést.
Offline
↑ buff:
Bude to fungovat v radiánech.
V příspěvku #6 od ↑ mák: je to f = k*u kde k = Pi/180 právě převod stupňů na radiány a také b = (a-360*k)/n-f je v radiánech.
Ještě poznámka k tomu co chceš. Je sice chválihodné, že se zjímáš o takový problém, ale proč vykreslovat n-úhelník pixel po pixelu, když každý "normální" programovací jazyk má nástroje na to, jak udělat úsečku, kružnici, většinou i polygon atd.
Pak pro n-úhelník stačí vypočítat souřadnice vrcholů (ty uložit třeba do nějakého pole nebo do pole bodů) a pak tyto vrcholy spojit úsečkami (nebo z nich vytvořit polygon)
Kyž to totiž budeš dělat tak, jak navrhuješ, tak ty obrázky nebudou vypadat nijak moc pěkně (při dělení po jednom stupni). Strany n-úhelníka nebudou "hladké" křivky, ale pouze izolované body. O tom se můžeš přesvědčit na obrázcích v příspěvku #4 od ↑ mák:, a to si myslím, že nemá vykreslovaný pouze 1 pxel na pozici x,y, ale ještě minimálně 4 další okolo tohoto bodu.
Offline
Jenže já myslím nepsal, že to chci kreslit. Psal jsem že to chci vypočítat. Tzn. souřadnice jsou k úplně jinému účelu pro externí program.
A o to mi právě jde o izolované body
Offline
Píšeš Tzn. souřadnice jsou k úplně jinému účelu pro externí program.
Na co ten externí program bude?
Jenom pár poznámek
1. Každý n-úhelník je charakterizován svými vrcholy a ty jsou pak spojeny úsečkami.
Uniká mi tedy smysl toho, proč dělat mezi vrcholy ještě nějaké body (které leží na spojnici
těchto vrcholů)
2. Dělení po 10-ti stupních je moc hrubé, např. pro 36-ti úhelník dostaneš pouze vrcholy. Pokud
360/n nebude celé číslo pak už (při dělení po 10-ti stupních) nedostaneš vrcholy, ale nějakou změť bodů ležících
na stranách n-úhelníka a pak nepoznáš o jaký n-úhelník se jedná.
3. Pokud se cheš zabývat křivkami, tak se podívej na parametrické vyjádření takové křivky
Zde máš několik tipů
Název funkce (křivky) x(t) y(t) tmin tmax
Elipsa 6*cos(t) 4*sin(t) -Pi Pi
Cykloida prostá t-sin(t) 1-cos(t) -2*Pi 2*Pi
Cykloida zkrácená t-0.5*sin(t) 1-0.5*cos(t) -2*Pi 2*Pi
Cykloida prodloužená t-1.5*sin(t) 1-1.5*cos(t) -2*Pi 2*Pi
Epicykloida prostá 0.5*(5*cos(t)-2*cos(5*t/2)) 0.5*(5*sin(t)-2*sin(5*t/2)) -2*Pi 2*Pi
Kardioida 2*cos(t)-cos(2*t) 2*sin(t)-sin(2*t) -2*Pi 2*Pi
Nefroida 3*cos(t)-cos(3*t) 3*sin(t)-sin(3*t) -2*Pi 2*Pi
Pascalova závitnice 2*cos(t)-1.5*cos(2*t) 2*sin(t)-1.5*sin(2*t) -2*Pi 2*Pi
Hypocykloida prostá 0.5*(3*cos(t)+2*cos(3*t/2)) 0.5*(3*sin(t)-2*sin(3*t/2))-2*Pi 2*Pi
Steinerova hypocykloida 2*cos(t)+cos(2*t) 2*sin(t)-sin(2*t) -2*Pi 2*Pi
Asteroida 3*cos(t)+cos(3*t) 3*sin(t)-sin(3*t) -2*Pi 2*Pi
Rhodonea-3listy 2*cos(t)+2*cos(2*t) 2*sin(t)-2*sin(2*t) -2*Pi 2*Pi
Evolventa kružnice sin(t)-t*cos(t) cos(t)+t*sin(t) -1.43*Pi 1.43*Pi
Hyperbolická spirála 3*cos(t)/t 3*sin(t)/t 0.1*Pi 3.9*Pi
Logaritmická spirála exp(0.2*t)*cos(t) exp(0.2*t)*sin(t) -Pi 3*Pi
Dioklova kisoida t^2/(1+t^2) t^3/(1+t^2) -2*Pi 2*Pi
Descartův list 3*t/(1+t^3) 3*t^2/(1+t^3) -10*Pi 10*Pi
Strofoida 2*(1-t^2)/(1+t^2) 2*t*(1-t^2)/(1+t^2) -2*Pi 2*Pi
Bernoulliova lemniskáta 3*t*(1+t^2)/(1+t^4) 3*t*(1-t^2)/(1+t^4) -10*Pi 10*Pi
Motýlek (exp(cos(t))-2*cos(4*t))*sin(t) (exp(cos(t))-2*cos(4*t))*cos(t) 0 2*Pi
Osmička 3*sin(t) 3*sin(2*t)/2 0 2*Pi
Piriform 2*(1+sin(t)) 2*(1+sin(t))*cos(t) 0 2*Pi
Zajímavé parametrizace křivek jsou např. Zde
Offline
Honzc napsal(a):
Píšeš Tzn. souřadnice jsou k úplně jinému účelu pro externí program.
Na co ten externí program bude?
Jenom pár poznámek
1. Každý n-úhelník je charakterizován svými vrcholy a ty jsou pak spojeny úsečkami.
Uniká mi tedy smysl toho, proč dělat mezi vrcholy ještě nějaké body (které leží na spojnici
těchto vrcholů)
2. Dělení po 10-ti stupních je moc hrubé, např. pro 36-ti úhelník dostaneš pouze vrcholy. Pokud
360/n nebude celé číslo pak už (při dělení po 10-ti stupních) nedostaneš vrcholy, ale nějakou změť bodů ležících
na stranách n-úhelníka a pak nepoznáš o jaký n-úhelník se jedná.
Ten externí program je editor scénáře pro jednu hru. Scénář je v podstatě mapa objektů (budov, stromů, jednotek atp.). Ten program který dělám určuje kde bude ležet který objekt. Je takto možné pomocí vzorce vybudovat opevnění např. z hradeb nebo ze střeleckých věží a jiné věci. Podle toho spustím buď funkci na vytvoření kruhu pro kulaté opevnění nebo čtverce, pentagonu atd. Navíc když zdám od kterého to chci úhlu a po který úhel to chci, tak už nevzniká třeba čtverec, ale opevnění které má jednu stranu otevřenou a z té může být třeba les nebo cokoliv jiného. To samé se tá použí na rozmisťování velkého počtu jednotek a vytvořit tak celé armády. Případně tyto souřadnice mohu použít na vytvoření předpisu, který řekne kde se mají jednotky vytvářet během hry (nebo odkud kam se mají přesouvat pokud to bude komplikovanější).
Funguje to skvěle, až na pár malých chybiček, které potřebuju vyladit. To že se v některých místech nezobrazí přesně vrchol nebo nějaký bod je fakt. Myslím, že by se to dalo spravit funkcí, která určité místo "zaokrouhlí" a pozmění pozici pokud je hodnota blízká určitému bodu. Jinak si ještě musím vyřešit a překontrolovat aby se mi nepřekrývali budovy pokud by souřadnice vycházely občas moc hustě vedle sebe.
Aktuální problém který teď řeším je že když krok n = 0 tak vznikne dělení nulou, konkrétní hodnoty jsou poloměr 18 a úhel 190. e vychází 0. Ale to mám asi nejspíš chybu já někde ve svoji funkci, kterou musím najít.
Když tomu tak dobře rozumíte, možná by jste mi mohl ještě objasnit co znamenají ty jednotlivé proměnné ve vzorci, jen abych byl v obraze s čím se tam vlastně počítá.
Offline
Z těch křivek se mi líbí ty hvězdice v druhé řadě o tom jsem taky uvažoval že by se hodilo ale spíš bez toho kruhu uprostřed. Chtělo by to totiž vytvořit opevnění tohoto typu:
http://www.executedtoday.com/images/Bat … 83_map.jpg
Možná by šlo nějak lehce upravit/doplnit ten Mákův vzorec/program tak aby se mezi vrcholy vešel ještě jeden bod, který by měl menší poloměr a vytvářel tak dvě linie jdoucí směrem jakoby dovnitř kruhu .... Je to podobní asteroidě.
Taky zajímavá se mi jeví Archimédova spirála. Epicykloida by byla zajímavá z hlediska těch čar uvnitř.
Offline
Je zvláštní, že ve výsledku budovy vypadají zdvojeně, jakoby ta křivka kolísala. Oprava: Kolísání křivky se týkalo pouze spirály vytvořené z polgonu, nikoliv polygonu samotného.
Offline
↑ buff:
Zdravím,
buff napsal(a):
No hlavně aby mi někdo odpověděl když si to téma přesunula.
No jak vidíš - efekt to mělo - kolegům děkuji ↑ mák:, ↑ Honzc: a věřím, že se ještě zapojí. Ta ↑ mapa: je úžasná, pokud se tak vůbec dá mluvit o bitevní mapě (aktuálně čtu tuto knihu).
K problému - používáš kód kolegy ↑ mák: pro n=4 a místo jedné čáry a jednoho vrcholu vykresluje zdvojenou čáru a zdvojený vrchol (věž?) nebo jiný kód? Pokud kreslíš jen zeď, bez věží, také zdvojuje? Děkuji.
Offline
jelena napsal(a):
K problému - používáš kód kolegy ↑ mák: pro n=4 a místo jedné čáry a jednoho vrcholu vykresluje zdvojenou čáru a zdvojený vrchol (věž?) nebo jiný kód? Pokud kreslíš jen zeď, bez věží, také zdvojuje? Děkuji.
Já děkuji za zapojení. Je to ten Mákův kód. Asi není úplně v pořádku. Protože když se podíváš na jeho obrázky/grafy tak je vidět že i jemu to trochu lítá zprava doleva. Nahoru dolu, pixely nejdou úplně rovně přímou čárou. Já teď testuji na stěnách a ty jsou v mnohých místech zdvojené. Celková výchylka někdy zasahuje až do 3 kachlí (kachle je to co na čem leží ta stěna). Je to tedy odchylka o 0-3 a to je dost. Kdyby to bylo pod 0.25 tak se to zaokrouhlí dolů takže by vy výsledku byla jen jedna čára.
Problém je v tom, že se tak zkonzumuje mnoho jednotek navíc což pak zabírá místo, i to komplikuje dobití a vymazávání se taky provádí blbě (stěnu v pozadí horizontální stěny není moc vidět). Ale věřím, že je třeba provést úpravu mákova kódu, jenže mu nerozumím. Nevím co znamenají jednotlivé proměnné. Já třeba píšu kód tak že místo písmen dávám názvy popisujícím způsobem např.
total_steps = (toDegree-fromDegree) / increaseStep radius=... length=6.2831853071*radius ; obvod pomyslné kružnice stepSize=increaseStep if ( length / total_steps < 1 ) nLoops= ( total_steps / radius) * ( sides / stepSize )
popsání těch proměnných by pomohlo
Jinak můžete poradit jak vypočítat archimédovu spirálu? Ta by mě taky zajímala. I když jsem už jakési spirály dosáhl, ta archimédova je trochu jiná (myslím na jiném přincipu).
Taky bych chtěl vědět jak vypočítat ty hvězdice.
Offline
↑ buff:
no je potíž - kód kolegy ↑ mák: jsem se nepřinutila rozluštit (pátek :-)). Když jsem včera přesouvala Tvé téma, tak moje představa o kreslení byla taková:
přímky stran čtyřúhelníku (orientace dle obrázku kolegy mák(a) jsou:
pro 0 až 90,
pro 90 až 180
pro 180 až 270
pro 270 až 360
----------------------------
pokud volíš úhel pro umístění bodu na přímce strany, potom hledáš průsečík přímky strany a přímky . 5ešením soustavy vznikne dvojice souřadnic x, y Tvého hledaného bodu.
Pokud potřebuješ najít souřadnice bodů na přímce strany (bez volby úhlu), potom jen rozdělíš interval od -r do r "na kroky" - to budou souřadnice x a k tomuto kroku dopočteš y.
---------------------------------------------------
Tento postup lze zobecnit na libovolný pravidelný mnohoúhelník (i na nepravidelný, pokud budeš zadávat polohy vrcholů - tedy od stavby věží. Princip je takový, že nejdřív určuji rovnice přímek budoucích stran a na těchto přímkách vytyčuji body. Ale zas - kód kolegy funguje, až na potíž zdvojování, tak snad by mělo větší efekt počkat na reakci kolegy.
Pro Hvězdici (tedy také z přímek) bude něco obdobného, pro spirálu - parametrizace (viz příspěvek kolegy Honzce)
Moje představa o počítačových (a nejen) hrách je silně mlhavá - jednou jsem na požádání milého syna prošla nějaký level, který se mu nedařilo překonat a to je opravdu všechno.
Offline
↑ jelena:
Tak jsem si uvědomil, že si mě nepochopila. Tam nejsou žádné věže. To co vypadá jak věže jsou také zdi, akorád to mění vzhled, protože osamocená zeď vypadá jinak než zeď, která je v řadě. Také zeď na začátku a na konci linie vypadá jako věž.
Offline
Zdravím,
pokusím se popsat svůj kód srozumitelněji a současně jej napíšu znova.
Nejprve napíšu princip.
Mám střed - z něj vycházím. Označím jej . Jeho souřadnice jsou a . V programu jej neuvidíš, protože jeho hodnoty jsou nulové.
Budu zjišťovat bod, který protíná N-úhelník, přesněji jednu jeho stranu. Ten bod zatím neznám, ale zvolím si bod na kružnici , který bude tato přímka protínat. Označím jej . Jeho souřadnice budou a . Ty si umím vypočítat. Máme tedy jednu přímku, která začíná v bodě , který známe a končí v bodě , který si vypočítáme.
Druhá přímka, kterou tato protíná je vlastně stranou N-úhelníka. Jak zjistím tyto vrcholy?
Víme že N-úhelník nám rozděluje celý obvod na částí, každá z nich je stejně velká a zabírá úhel .
Vrcholy budou sedět přesně na tomto násobku.
Teď pro snadnost si představíme hodiny. Začínají na 12 hodině - což bude úhel 0°. A pokud budeme pokračovat ve směru hodinových ručiček tak se nám bude zvětšovat úhel až k 360°.
Takže pokud nám přímka bude protínat stranu, tak jeden vrchol strany, který bude svírat menší úhel, pojmenujeme "první" a vrchol, který bude svírat větší úhel pojmenujeme "druhý" . Máme tedy druhou přímku .
Výpočet si rozdělím do několika částí.
První část - (zabývá se úhly nejprve ve stupních a pak v radiánech):
Vypočítám velikost segmentu:
Velikost úhlu od prvního vrcholu (trojúhelník ):
Pomocnou hodnotu pro převod z úhlových jednotek na radiány (počítač s nimi počítá):
Velikost úhlu vrcholům , , od středu (vztahují se k pomyslné 12 hodině):
Další část - budu počítat a souřadnice vrcholů , , :
A poslední část - najdu průsečík přímek, nejprve pro souřadnici a pak následně pro :
A na závěr kompletní program v wxMaximě:
fg(u,n,r):=block([Nn,Nu,Ru,Pu,Du,Rx,Ry,Px,Py,Dx,Dy], Nn: 360 / n, Nu: mod(u, Nn), k: %pi/180, Ru: k*(u), Pu: k*(u - Nu), Du: k*(u - Nu + Nn), Rx: r*sin(Ru), Ry: r*cos(Ru), Px: r*sin(Pu), Py: r*cos(Pu), Dx: r*sin(Du), Dy: r*cos(Du), [((Dy*Px-Dx*Py)*Rx)/((Px-Dx)*Ry+(Dy-Py)*Rx),((Dy*Px-Dx*Py)*Ry)/((Px-Dx)*Ry+(Dy-Py)*Rx)] )$ compile(fg); L: makelist(float(fg(i,4,11)),i,0,360,.1)$ wxplot2d([discrete,L],[style,[points,0.5,2,1]],[x,-12,12],[y,-12,12], [gnuplot_preamble,"set grid; set xtics 2; set ytics 2; set size ratio 1;"] ), wxplot_size:[600,520];
A výsledný obrázek (tentokrát výpočet probíhal po 0.1°.
Offline
↑ jelena:
Pro tu archimédovu spirálu je vzorec ró = a * fí ... chápu že ró je bod o souřadnicích (nebo interval bodů v závislosti na čase?).
Pak je tam vzorec
x=a*fí*cos fí
y=a*fí*sin fí
co ale znamená a a kde je poloměr jsem nepochopil. Je to psáno programovacím jazykem kterému nerozumím (i ten mákův kód, ale to tak nevadí, mák k tomu dal vysvětlení, které se pokusím pochopit).
A kde je úhel? není to jako x=r*úhel*cos fí?
Ke tvému vzorci pro výpočet polygon se chci zeptat co je to r? jelikož x-r mi nedává smysl.
A taky jak si došla ke vzorci y = tg úhlu * x ? Znám akorád ten vzorec tg úhlu = y/x
Poznámka k obrázku: chtěl jsem napsat 1/5 kruhu nebo 1/6 pí, neumím to odhadnout.
Potíž je v tom, že i když znám vrchol A, tak neznám souřadnice x,y. Tedy jak si došla ke svému vzorci? Vlastně znám, vždyď ve svém programu počítám souřadnice běžně jako x=sin úhlu *r a y=cos úhlu * r
Tak mám pocit, ž emluvíš o něčem jiném než já, protože sinem a cosinem vypočítám souřadnice toho co mám na obrázku.
Offline
↑ mák:
Dík za popis, ale už na začátku se ztrácím. Těžko se mi to představuje. Definici trojúhleníku PSR nechápu. Můžete to přirovnat k mému obrázku? Čemu co odpovídá? Na obrázku mám označený jeden vrchol A a bod B, jež je definován souřadnicemi k vrcholu či vzdáleností mezi BS a AS jež je tedy rozdílem hodnot B-S a A-S.
Takže jediné co jste změnil bylo to krokování?
To je divné. Velikost krokování by neměla mít vliv na přesnost křivky. Pokud máte např. krokování 5, tak by měly být všechny body propojitelné jednou línií, bez toho aniž by zasahovaly do sousedních/přilehlých řad bodů.
Já ale nemohu snížit přesnost krokování na 0.1 ta mapa vyžaduje krokování 0.5 nebo 1.0. Dá se přesnost zvýšit nějak jinak? Třeba přidáním koeficientu natvrdo na nějakého místa ve vzorci? Aniž by to ovlivnilo krokování.
Offline
Zkoušel jsem to vypočítat ještě jinak, ale nějak jsem se na tom zasekl a nevím jak dál:
makePolygon2(sides, radius, angle, n, from=0, to=360, fullRound=1) { fullRound := fullRound ? 1 : 0.5 ; krok na mapě one_section:=360/sides section_number:=ceil( angle / one_section ) previous:=getCircleXYCoords((section_number-1)*one_section, radius, arr = false) next:=getCircleXYCoords(section_number*one_section, radius, arr = false) actual:={"x":previous["x"]+fullRound} m:=(next["y"]-previous["y"])/(next["x"]-previous["x"]) ; y-y1 = m*(x-x1) ; y = m*(x-x1)+y1 b:=previous["x"]+actual["x"] y := m*(b-next["x"])+next["y"] return % {0:x,1:y} }
jeto podle tohoto postupu:
http://www.mathsisfun.com/algebra/line- … oints.html
a asi tam mám chybu, protože x mi vždy vychází 0
getCircleXYCoords má vstupní parametry úhel, radius. Používá sin a cos k výpočtu pozice bodu.
Zvládl by to někdo opravit?
previous - je předchozí vrchol/bod
next - je následující vrchol/bod
actual - má být bod na přímce mezi těmi dvěma vrcholy, jehož pozice x je větší buď o jedna nebo o půl. (Jsou zde dvě možnosti) Myslím že takhle jak jsem to napsal je to jasný, jen tam mám drobnou matematickou chybu. Funkce getCircleXYCoords() funguje jen v závislosti na úhlu a radiusu a vrací výsledek správný, to už mám dávno ověřené.
Nevím jistě jestli by ty výpočty podle vzorce y = m*(x-x1)+y1
neměly být dva. Nejdříve s next a potom s actual? mám tam jen jeden výpočet a ten aktual x tam je jen u výpočtu b.
Offline
Znova k mákovu grafu. Jeho poslední obrázek ukazuje jasně, že čtverec prochází dvěma "řadama" čtverců najednou (vzhledem k ose x je to diagonálně proto uvozovky). Tak asi to není zas tak špatně jak se mi zprvu zdálo. Ovšem nutno dodat, že místy se nelogicky objevuje právě ta třetí kachle či čtverec.
Takže k mákovu výpočtu mám dotaz, jestli by se dala nějak omezit ta hodnota, aby vycházela pouze jedna "řada", například buď ta vnější nebo ta vnitřní. Hodnota, která je blíže k nule nebo dál k nule. Snad by se to dalo nějak vztáhnout k proměnné která určuje velikost kroku (po kolik stupních krokovat). Pokud jsou kachle moc blízko... definice termínu blizko je závisla na velikosti konstanty "fullRound" která je buď 1 nebo 0.5. Takže by to asi chtělo nejdříve spočítat průměr pro několik prvních kroků, tu hodnotu uložit a pak rozhodnout, která ze dvou po sobě jdoucích hodnot je blíže nebo dále a jestli je dále než je průměr, pak by tato hodnota nebyla vypočítána.
Ovšem problém je ještě v definici slova průměr, protože nemůžeme použít poloměr, ale nějaký koeficient se kterým se ve vzorci pracuje. Takže by se musela vypočítat průměrná hodnota nějakého koeficientu. Nebo snad střední hodnota minima a maxima toho koeficientu. Snad by to tak šlo?
Anebo mě napadá druhá možnost. Opět použít to konstantu fullRound a určit hranice čtverců. Když se opět podívám na máchův čtverec je vidět jasná pravidelnost, takže by se dalo matematicky definovat která kachle je lichá a která je sudá a já bych si tedy řekl jestli chci hodnoty v sudém nebo lichém pořadí. To zní jednodušeji ne?
Jestli to ale bude platit stejně i pro spirálovitý průběh línií, protože měním průměr od min po max hodnotu.
Offline
Zdravím,
s Tebou je potíž taková - nemáš, prosím, v okolí např. studenta 1. ročníku slušné VŠ (technika např.)?
Celá Tvá úloha je tom, že potřebuješ najít souřadnice bodu. Cesta k řešení - průsečík přímek procházejících přes "známé body". Jak zadat známé body?
Kolega ↑ mák - příspěvek 19: volí počáteční polohu v bodě na hodinkách odpovídající 12 hodinám a od tohoto bodu počítá:
a) "sekci" mnohoúhelníku, do kterého se dostává hledaný bod na straně, tato sekce je vymezena body P, D. proto body zadávají přímku, na které leží i strana PD.
b) přímku, na které leží hledaný bod - tato přímka je od počátku (12 hodin) odchylena ve směru po ručičkám hodinek o úhel . Tato přímka prochází středem kružnice S a bodem na kružnici R.
c) hledá průsečík těchto přímek.
Obrázky strašné: obrazek1 a Obrázek2
-----------------
Tvůj postup - "next" a "previous" zadávají m pro rovnici strany mnohoúhelníku , pro dopočet q můžeš použit next nebo previous tak: .
Odsud rovnice strany .
Teď budeš krokovat od x previous až do x next (dosazovat místo x do rovnice) a najdeš souřadnice y.
Ovšem podstatné - jak se dostáváš na pozici "previous" a "next" - jsou to body na kružnici opsané Tvému mnohoúhelníku a vymezuji "sekci"?
Ovšem problém je ještě v definici slova průměr, protože nemůžeme použít poloměr, ale nějaký koeficient se kterým se ve vzorci pracuje. Takže by se musela vypočítat průměrná hodnota nějakého koeficientu. Nebo snad střední hodnota minima a maxima toho koeficientu. Snad by to tak šlo?
Proč nejde používat poloměr kružnice opsané mnohoúhelníku? Co tomu braní? Děkuji.
Offline
jelena napsal(a):
s Tebou je potíž taková - nemáš, prosím, v okolí např. studenta 1. ročníku slušné VŠ (technika např.)?
Nemám. Díky za obrázky. Skvělé.
jelena napsal(a):
Ovšem podstatné - jak se dostáváš na pozici "previous" a "next" - jsou to body na kružnici opsané Tvému mnohoúhelníku a vymezuji "sekci"?
Jasně, previous a next leží na kružnici r a vymezují sekci, kdežto actual je hledaný bod, který leží na "naší" přímce.
Ovšem problém je ještě v definici slova průměr, protože nemůžeme použít poloměr, ale nějaký koeficient se kterým se ve vzorci pracuje. Takže by se musela vypočítat průměrná hodnota nějakého koeficientu. Nebo snad střední hodnota minima a maxima toho koeficientu. Snad by to tak šlo?
Proč nejde používat poloměr kružnice opsané mnohoúhelníku? Co tomu braní? Děkuji.
Protože hledaný bod neleží na kružnici, kromě případů známých vrcholů. Jestli tedy vzorec pracuje s koeficiem odchylky (minimální a maximální hodnoty o které se liší odchylka polohy od kružnice) tak by to bylo snad snadnější.
Offline
Stránky: 1 2