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
jelena napsal(a):
-----------------
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.
Takže tu třetí rovnici nepotřebuju, použiju ty dvě první co si napsala.
Offline
buff napsal(a):
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.
To jelena asi nedočetla, protože jsem to přidal poději. Byla by to druhá možnost jak profiltrovat ty výsledky.
Ty hledané hodnoty by měly být uvnitř těch vyznačených kachlí. Všimněte si že ty kachle se navzájem dotýkají ale pouze v rozích. Předpokládám, že ty kachle jsou definované tím krokováním tedy konstanta fullRound je buď 1 nebo 0.5
No a snad by to šlo použít i na tu spirálu... budou se kachle dotýkat když budu poloměr postupně navyšovat?
Offline
Můj pokus o výpočet se nezdařil. Problém je v tom navyšování x. Myslím, že touto cestou to nepůjde. Problém je ve výpočtu actual["x"].
Já vlastně fakticky nevím jestli smím navýšit x + 1. Pokud postupuju po jednotlivých stupních nebo i po půlkrocích, tak vlastně nevím jestli v daném místě má být čára zdánlivě rovná (pro y1 a y2 je x stejné) nebo se má navýšit o jednu jednotku nebo v případě trojúhelníku i více než o jednou jednotku. Prostě nevím o kolik x navýšit. Mohu si sice dosadit libovolnou hodnotu, jenže když budu navyšovat x rovnoměrně, tak vzniknou nerovnoměrně rozložené body. Tzn. budou různé vzdálenosti mezi nima. Takže tady končím a vracím se k mákovu řešení, které ovšem potřebuje nějak doplnit, abych se zbavil bodů které leží v "diagonální" řadě čtverců.
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*n*section_number}
if (actual["x"]=>next["x"])
msgBox, problem here
m:=(next["y"]-previous["y"])/(next["x"]-previous["x"])
b:=previous["y"]-m*previous["x"]
y:=(m*actual["x"])+b
return % {0:actual["x"],1:y}
}PS:
Opět doplňuji předchozí příspěvek o obrázek a poznámku
Offline
To jelena asi nedočetla
:-) asi ne.
Ohledně kachli - nejdřív bych vyřešila jen body - středy kachli (toto zřejmě dává zkreslení, že samotná kachle má rozměr). Tedy pokud máš už kachli nějak zadefinovanou, tak si zadefinuj střed kachle a zatím minimální možný rozměr kachle. To by možná napravilo problém s použitím kódu kolegy mák.
Já vlastně fakticky nevím jestli smím navýšit x + 1
Ohledně krokování - nemůžeš přidávat libovolnou hodnotu. Musíš nejdřív vypočíst vzdálenost
(pravděpodobně bude třeba pracovat s absolutní hodnotou) a tuto vzdálenost poděl předem stanoveným číslem podle toho, kolik bodů chceš na úseku mít (např. podělím 5, dostanu 5 mezer mezi body a celkem 4 body na úsečce). Velikost mezery potom budeš přičítat k předchozí hodnotě x_{predchozi}. Můžeš si přidat krok, ve kterém vyhodnotíš vzdálenost po ose x mezi body a k tomu změníš počet mezer.
Offline
Myslíš takto?
actual:={"x":previous["x"]+( next["x"]-previous["x"]/(360/sides))*n }
Teď večer už mám málo času, zítra během dne tu nebudu až snad večer zbude trochu času.
Offline
↑ buff:
ne, myslím: actual_1:={"x":previous["x"]+(next["x"]-previous["x"])/(nějaké číslo)}
potom actual_2:=aktual_1+(next["x"]-previous["x"])/(nějaké číslo) atd.
to "nějaké číslo" musíš domyslet - bude souviset s velikosti kachle přibližně tak: na úsečku mezi vrcholy mohu umístit přesný počet kachli podle rozměru kachle. Pokud rozměr kachle je přesně dán, potom na úsečku mezi vrcholy lze umístit ("vzdálenost vrcholů"/"rozměr kachle"-1) bodů středů, nebo ("vzdálenost vrcholů"/"rozměr kachle") mezer.
Zde může být problém v tom, že nevyjde přesně celý počet kachli. Prakticky to snad jde provést tak, že kachle dokládáš postupně za sebou a poslední celá kachle bude udávat souřadnici nového vrcholu. No jak se to bude programovat, to ještě nevím, jelikož zatím jsme ani já, ani kolega mák neuvažovali rozměr kachle, jen "bezrozměrný" bod. Zkus zatím pracovat s body.
Offline
Teď píšeš o něčem jiném než píšu já. Problém je v tom že ta moje funkce není dodělaná. Ještě nefunguje tak jak mohu počítat nějaké kachle? Myslel jsem udělat ten počet s kachlemi na tu mákovu funkci. a tam samozřejmě není previous, next, tam je to jinak.
to actual v moji funkci znamená aktuální bod
Offline
ta moje funkce není dodělaná.
musíš se naučit formulovat své představy s ohledem, že posluchač/čtenář celý vývoj problému nezná - s tím jsi pracoval, než jsi téma založil. Tedy vstupem pro myšlenky jiných musí být výstup Tvého dosavadního snažení, ale zas ve formě, aby čtenář opět neprocházel celou cestu myšlenek.
Projdi si, prosím, ještě jednou Tvé téma od začátku - postupně z Tebe tahám(e) co je účelem a jaké jsou možnosti. Téma prokládáš různými odstupy, co s prvotním problémem nesouvisí a přeskakuješ z jedné úvahy do druhé v rozsáhlém textu.
"Next - previous" jsi zavedl v příspěvku, ve kterém se pokoušíš hledat průsečík přímek.
Problémy jsou takové:
a) odlaď si svoji funkci, aby vykreslovala jednotlivé body, které budou později středy malých krychlí. Pokud používáš funkci od kolegy mák a volíš krokování v úhlech, potom budeš používat oblouk kružnice mezi body vrcholů. Zapracoval jsi oblouk? oblouk odpovídá úhlové poloze prvního vrcholu a druhého vrcholu, úhel mezi vrcholy (PSD) musíš rozdělit podle stejného principu na kroky. Tj. nejdřív si stanovit počet mezer, na které úhel dělíš, potom přepočteš velikost mezery, kterou budeš přidávat k "vrcholu previous".
Stejnou službu splní i dělení jen po ose x - jak jsem popsala v ↑ příspěvku 31:.
Ale nesplní to, co navrhuješ Ty
actual:={"x":previous["x"]+( next["x"]-previous["x"]/(360/sides))*n }
Co prakticky znamená tato část? Děkuji.
b) až doladíš vykreslení bodů, potom se posuneš k lepení na body kachli. Zde doporučuji uvažovat lepení k sobě kružnic kachli opsaných nebo vepsaných (to se ještě musí domyslet). Když první vrcholovou kachli umístíš "do boku" (ne středem na vrchol), potom se vytváří problém zdvojování - alespoň tak to vidím.
Offline
jelena napsal(a):
Zapracoval jsi oblouk? oblouk odpovídá úhlové poloze prvního vrcholu a druhého vrcholu, úhel mezi vrcholy (PSD) musíš rozdělit podle stejného principu na kroky. Tj. nejdřív si stanovit počet mezer, na které úhel dělíš, potom přepočteš velikost mezery, kterou budeš přidávat k "vrcholu previous".
Ne oblouk jsem nezabracoval. Vždyť jsem ani nevěděl že tam nějaký je, protožejsem nevěděl jak mákova funkce pracuje. Ještě na tom budu v příštím týdnu dělat a uvažovat o tom jak ta jeho funkce pracuje.
jelena napsal(a):
Stejnou službu splní i dělení jen po ose x - jak jsem popsala v ↑ příspěvku 31:.
Ale nesplní to, co navrhuješ Tyactual:={"x":previous["x"]+( next["x"]-previous["x"]/(360/sides))*n }
Co prakticky znamená tato část? Děkuji.
tak to nebylo domyšlené. Ale nechtěj teď v noci abych ještě přemýšlel.
Offline
Shrnutí dosavadních výsledků a cíle
-------------------------------------------
Jelikož se mi na dnešek změnili plány tak zase píšu a rozhodl jsem se tedy shtnout co jsme tu probrali, kde jsem a co potřebuju.
Takže:
PŮVODNÍ ZADÁNÍ
Původní zadání bylo získat výpočet bodů na pravidelném polygonu, jehož vrcholy leží po obvodu kružnice, s níž má tento polygon společný střed. Cílem tedy je získat souřadnice rovnostranného trojúhelníku, čtverce, pentagramu, hexagramu nebo heptagramu, oktagramu, atd.
Užití v praxi:
Užití těchto souřadnic bude v programu na tvorbu herního scénáře, ve kterém je mapa skládající se z 255x255 čtvercových kachlí. Každá kachle představuje celé číslo. Výpočtem souřadnic dostanu pozice na kterých budou ležet různé objekty jako budovy, jednotky.
VSTUPNÍ HODNOTY, POSTUP
Kružnice leží v bodě 0,0.
Body polygonu by se měly postupně vypisovat od úhlu 0° až po úhel menší než 360°. Je možné změnit počáteční a konečný úhel, takže polygon nebude uzavřený nebo bude otočený.
Krokování může být buďto 1 nebo 0.5
Výsledek:
Dostal jsem funkci od Máka, která funguje (zřejmě bezchybně)
TERMINOLOGIE
V zájmu snadnosti komunikace jsme se dohodli na označení dvou známých vrcholů tvořících začátek a konec strany jako Previous a Next (tyto body odpovídají bodům P a D v mákově příspěvku).
Jako Aktual jsem označil hledaný aktuální bod na přímce mezi vrcholy Previous a Next. Ve funkci od máka by tento bod odpovídal tomu bodu ležícímu na straně, který je protínán pomyslnou přímkou vycházející z bodu S, a která s počáteční přímkou svírá úhel angle jež je vstupní hodnotou funkce (v mákově funkci je tato proměnná pojmenovaná u).
Offline
S odstupem to vyhodnocuji tak, že s tím už asi nic moc dělat nepůjde. Ta hra je postavena na 45° úhlech, tedy konkrétně ty stěny nemohou mít jiný úhel. Hexagony, pentagramy, trojúhelníky budou vždycky z větší části vypadat kostrbatě. Čtyřúhelníky a oktagony vypadají dobře. Jeden kamarád z internetu mi poslal ještě jinou variantu té funkce co jsem zkoušel udělat, na výpočet souřadnic polygonu. I když to není čistě jen matematematický výpočet ale i podmínky, tak je to zase srozumitelné.
Offline
Stránky: 1 2