Úvod
Tento návod seznámí Vás, uživatele programu Deskriptivní geometrie, s ovládáním programu, s programovacím jazykem, který budete při užívání tohoto programu používat, a s dalšími vlastnostmi tohoto programu. Není však učebnicí ani deskriptivní geometrie, ani programování.
Doufáme, že se vám bude program zamlouvat a že jej využijete při své činnosti. Případné připomínky a dotazy můžete zasílat na adresu autora.
Kontakt na autora:
Petr Plavjaník
Heyrovského 974
674 01 Třebíč

http://dg.vidivici.cz/
Účel programu
Program Deskriptivní geometrie byl vytvořen k usnadnění řešení úloh z deskriptivní geometrie. Základní princip spočívá ve vyrýsování podle postupu, který je zapsán uživatelem. Postup je zapisován v programovacím jazyce odvozeného z jazyka C, pozměněného tak, aby byl více vhodný pro řešení deskriptivních úloh.
Oproti tradičnímu rýsování na papíře má použití programu mnoho výhod:
- přesnost, všechny výpočty založeny na analytické geometrie a počítány s velice vysokou přesností, které je schopný dosáhnout jen počítač
- rychlost, rýsování programu je téměř okamžité
- flexibilita, cokoliv lze změnit, změna jednoho bodu způsobí změnu všeho, co se k němu vztahuje
- zápis složitých postupů (algoritmů), programovací jazyk umožňuje zápis strukturovaných příkazů (podmínek, cyklů) a funkcí
- jednoduchá orientace ve složitých rysech, najít tu
správnou čáru je snadné díky vysvícení těch objektů, se kterými se právě
pracuje
Technické informace o programu
Program byl vytvořen ve vývojovém prostředí Borland Delphi 5 pro Windows, které umožňuje vytváření aplikací pro Windows 95 a novější. Tudíž i program Deskriptivní geometrie požaduje ke svému běhu operační systém Windows 95 nebo novější. Tento systém přináší s sebou výhody a nevýhody. Mezi nejdůležitější výhody patří nezávislost na použitém hardware (je jedno jakou grafickou kartu, monitor a hlavně tiskárnu používáte) a snadné ovládání, které je podobné ostatním aplikacím v tomto systému. Nevýhodou pak je větší velikost programu.
Požadavky na vybavení počítače se odvíjejí od požadavků operačního systému. Aby bylo na programu možné pohodlně pracovat je zapotřebí počítače s procesorem Pentium a operační pamětí nejméně 16 MB. Nároky na pevný disk jsou malé (okolo dvou megabajtů). Důležitá je i velikost monitoru. Protože se jedná o grafický program, je pro dosažení kvalitního zobrazení zapotřebí většího monitoru (nejméně 15") s vyšším rozlišením (vhodným rozlišením je nejméně 1024x768, menší rozlišení se projeví na kvalitě).
Nároky na hardware nejsou přehnané a na dnes vyráběných počítačích (Pentium MMX, 32 MB RAM, 15" monitor, rychlá 2D (3D) grafická karta) běží program svižně a kvalita zobrazení je na dobré úrovni.
Popis prostředí programu Deskriptivní geometrie

Hlavní okno Deskriptivní geometrie obsahuje jako každá Windows aplikace nabídkový pruh - menu -, dále obsahuje panely nástrojů (tlačítkové lišty), které lze libovolně přesouvat nebo je schovat.
Vlevo je zobrazení rysu a vpravo textové pole pro zápis postupu. Pod postupem je ještě okno zpráv od překladače a programu; úplně dole je inspektor objektů. Poměry velikostí jednotlivých částí lze libovolně měnit tak, aby vyhovovaly uživateli.
Rys
Rys je výsledkem činnosti programu, je jím myšlen papír o velikostech nastavitelných z programu (více viz kapitola Nastavení rysu). Rys lze zvětšovat a zmenšovat, případně jím posouvat.
Zvětšení či zmenšení lze provést přes nabídku Rys, nebo pomocí panelu nástrojů Rys.
Při pohybu ukazatele myší nad rysem dochází k zobrazení souřadnic pod ukazatelem v nápovědním řádku. Pokud je v inspektoru objektů vybrán nějaký bod, jsou zobrazeny i souřadnice relativně k tomuto bodu. Při kliknutí levým tlačítkem dojde k vygenerování kódu, který vytvoří bod o těchto souřadnicích v půdorysu (bod(x, y, 0)). Pravé tlačítko vytvoří nárys. Držíte-li při kliknutí klávesu Ctrl, bude vytvořen bod s relativními souřadnicemi (A.1 + bod(x, y, 0)).
Postup
Jedná se o textové pole, které automaticky mění barvu podle významu postupu. Jeho ovládání je zcela standardní. Text lze označit do bloku, kopírovat, vkládat atd. Tyto příkazy jsou přístupné přes menu Úpravy nebo panel nástrojů a hlavně pomocí zkratkových kláves (Ctrl+X, C, V).
Mezi další funkce patří vyhledání textu a jeho případné nahrazení textem jiným.
Pod tímto textovým polem se nachází tzv. nápovědný řádek světle žluté barvy, jehož obsah se mění podle pozice kurzoru v textu. Pokud je nad nějakou funkcí, zobrazí se v tomto řádku její stručný popis a parametry.
Jestliže se nachází nad názvem nějaké skupiny, je tato skupina označena v inspektoru objektů a zvýrazněna na rysu.
Je vhodné před začátkem psaní postupu, přepnout si klávesnici na americkou, protože na ní se lépe píší číslice a symboly.
Pokud vyvoláte popup menu (stiskem pravého tlačítka myši nebo speciální klávesy na klávesnici), objeví se menu se seznamem všech funkcí, uživatelské funkce jsou na začátku seznamu a jsou označeny *. Po vybrání některé položky, bude název této funkce napsán do postupu.
Editor umožňuje Doplňování kódu, tzn. výběr možných pokračování části kódu. Například píšete ko, stisknete Ctrl + mezerník a v malém okénku se objeví seznam příkazů začínajících na ko (kolma, kolmice). Stisknete šipku dolů, Enter a v postupu se objeví kolmice.
Zprávy
Tento seznam obsahuje zprávy od překladače (chybová hlášení, pokud nastala chyba, jinak obsahuje dobu, po kterou překlad probíhal), nebo zprávu od programu (viz příkaz text). Každý řádek začíná číslem řádku programu, ke kterému zpráva náleží. Po vybrání určitého řádku ze seznamu se tento řádek v postupu zvýrazní.
Inspektor objektů
Je seznamem všech skupin objektů, které jsou seřazeny buď abecedně, nebo tak, jak vznikly. Po vybrání jakékoliv skupiny se objeví v pravé části její popis (blok, ve kterém vznikla) a seznam objektů, které do ní patří. U každého objektu je jeho číslo (stejné číslo, které se používá v programovacím jazyce), typ a číslo řádku. U některých objektů je napsána i jejich hodnota (u čísel, textu, bodů a vektorů). Při vybrání skupiny se zvýrazní tato skupina i na rysu. Pokud chcete zvýraznit jen jeden objekt, vyberte jej v seznamu. Stiskem pravého tlačítka se ukáže ta část kódu, ve kterém označený objekt vznikl (tento řádek bude třetí seshora). Poklepáním na nějaký objekt se vloží do kódu název jeho skupiny a případně i jeho číslo.
Rýsování myší
Od verze 1.2 je možné rýsovat pomocí myši. Tento způsob zadávání nenahrazuje zcela psaní postupu. Pomocí tohoto zadávání je možné vytvořit jen některé příkazy, ale je modifikovatelné (soubor Lang\jazyk.set), a tak je možné definovat zadávání myší i pro uživatelské příkazy.
Seznam všech příkazů se nachází ve stromu, který lze vyvolat klávesou Ctrl+H:

Po dvojitém kliknutí na položku se otevře okno pro zadání parametrů:

Nahoře je popis příkazu, což stejný název jako ve stromu. Pod ním je zdrojový kód ze souboru Lang\jazyk.set, pro bežné uživatele není důležitý. V poli jméno objektu se objeví automaticky zvolený název (je zvolený tak, aby byl nový). Tento název je možné změnit.
Tlačítka parametry není třeba mačkat, mění se v průběhu zadávání.
Typy parametrů mohou být následující:
| název | výsledek | příklad | popis |
| souřadnice | tři čísla | 5, 6, ? | Lze zadávat 3, 2 nebo 1 souřadici, přičemž zbylé budou otazníky. Při zadání tři se nejdříve zadávají myší na rysu souřadnice X a Y (v půdorysu) a pak jen Z (v nárysu). Tlačítka X, Y, Z určují, na které souřadnice bude mít vliv pohyb myši. |
| číslo | číslo | 1.2 | Číslo se zadává buď napsáním do editačního pole nebo myší jakou souřadnice X. |
| vzdálenost | Jde o vzdálenost myši na rysu (buď v půdorysu - tlačítko 1 -, nebo v nárysu - tlačítko 2 - od nějaké předešlého parametru zadávaného příkazu. Např. vzdálenost od středu je poloměr kružnice. |
| bod | identifikátor objektu | A:2 nebo B | Vybírá se na rysu a výsledkem je objekt typu bod, který má průmět v půdorysně nebo nárysně (nastavuje se tlačítky 1, 2) nejblíže ukazateli myší. Vybraný bod získá barvu vybraného objektu. |
| přímka | a | Zadání obdobně jako u bodu. |
| rovina | Pi | Vybírá se podle stop. Půdorysna (Pi) a nýrysna (Ny) se zvolí stisnutím stejnojmenných tlačítek. |
| jakýkoliv objekt | o | včetně kuželoseček |
Při pohybu myši po rysu dochází k automatické překreslování, pokud jsou zadány ostatní parametry. Po kliknutí na rys je parametr zadán a přejde sa na další. Pokud už není další, dojde k zapsání příkazu do postupu a postup se přeloží. Kurzor v postup se nastaví na další řádek, a tak je možné zadávat příkazy myší bez úprav postupu
Příkaz je ve tvaru: jméno = výsledný_příkaz;. Pokud jméno není zadáno je výsledný tvar výsledný_příkaz.
Nastavení
Dialogové okno Nastavení programu se skládá z několika stránek, v nichž můžete nastavit vlastnosti programu týkající se těchto oblastí:
Editor
Editor automaticky mění barvu a styl fontu v závislosti na významu postupu (od verze 1.1). Barva a styl fontu jsou přednastaveny a nelze je změnit.
Dále lze nastavit automatické odsazování, který začne nový řádek na tom sloupci, kde začínal předcházející řádek. Navíc pokud končí řádek znakem {, bude nový řádek odsazen o dvě mezery dál.
Pomocí klávesy F3 nebo příkazu Malý rys/Velký rys lze rychle měnit poměr velikosti rysu ku editoru. Na této stránce můžete tyto poměry nastavit v procentech šířky hlavního okna.
Nastavit lze automatické otevření okénka s Doplněním kódu po určitém čase, který lze také nastavit.
Zobrazení objektů
Zde je možné nastavit způsob vykreslení geometrických útvarů. Toto nastavení se týká pouze těch objektů, které nejsou v programu ovlivněny příkazy videt, styl, sek, barva nebo rozdel.
Důležité je barevné odlišení objektů vybraných v Inspektoru objektů.
Protože tiskárny mají vyšší rozlišení než monitor, bývají čáry na vytisknutých rysech velmi tenké. Toto lze vylepšit nastavením jejich šířky na této stránce.
Popis objektů
Při popisu objektů je třeba použít tří druhů písma: pro normální popis, pro indexy a pro řecká písmena (pokud jsou názvy objektů jako alfa (malá alfa a), Omega (velká omega W), omega (malá omega w)). Můžete nastavit font a velikost v centimetrech.
Lze nastavit maximální vzdálenost popisu od objektu.
Papír
Tato nastavení doporučujeme nastavit raději příkazem okraj.
Formát čísel
Program Deskriptivní geometrie vypisuje čísla ve dvou případech: v Inspektoru objektů a v Okně zpráv. U obou může nastavit počet všech míst a počet míst desetinných.
Ostatní
U časově náročnějších postupů je vhodné vidět, jak zpracování postupu probíhá. Toto lze zajistit zobrazením informačního okna, které se může automaticky schovat po skončení zpracovaní.
Tisk
Tisknout je možné postup nebo rys. Příkazy se nacházejí v menu Soubor. Po zvolení těchto příkazů se objeví standardní dialogové okno pro tisk, kde je možné nastavit tiskárnu, na kterou se bude tisknout, případně její vlastnosti, zda půjde o tisk do souboru a počet kopií.
Při nastavování velikosti papíru v oknech Tiskárna - vlastnosti nebo Nastavení tisku, si uvědomte, že toto nastavení je jen dočasné. Trvalé nastavení pro každý rys zvláš» je možné pomocí příkazů uvedených v postupu (viz kapitola Práce s programem - Nastavení velikosti rysu).
Spuštění programu
Postup, který jste napsali, můžete buď provést najednou (Postup - Spuštění (F9) ) nebo po jednotlivých krocích (Postup - Krok / Pauza (F8)). Příkaz Krok (F8) dělá kroky jen v aktivním bloku; pokud chceme projít vnořený blok musíme použít příkaz Krok dovnitř (Shift+F8). Při provádění postupu po krocích je třeba překreslit celý rys po příkazech videt, sek, rozdel, styl, popis, barva, vrat; po ostatních dojde jen k dokreslení nových objektů. Provádění postupu je možné ukončit příkazem Postup - Ukončení (Ctrl+F2).
Při ladění postupu může použít speciální příkaz jazyka DG - příkaz stop(), který zastaví program podobně jako příkaz Pauza (F8), ale jde o příkaz volaný z postupu.
Při spuštění postupu příkazem Postup - Spuštění (F9) nedochází k spuštění celého programu od začátku, dojde pouze k provedení nově přidaných řádků. Pokud chcete provést program od začátku použijete příkaz Postup - Nové přeložení (Ctrl+F9) .
Po provedení programu je možné sledovat průběh postupu příkazy Postup - Krok dopředu (F7) a Postup - Krok dozadu (F6).
Popis programovacího jazyka
Jak už bylo řečeno, jazyk vychází z jazyka C, ale byl pozměněn pro potřeby deskriptivní geometrie, v dalším textu bude označován jako jazyk DG.
Jedná se procedurální jazyk. Program se skládá z funkcí, mezi nimiž má výhradní postavení funkce hlavni, která se spouští jako první, je také jedinou funkcí, kterou musí obsahovat každý program.
Deklarace funkce:
identifikátor_funkce ([parametr1[, parametr2... ]] ) {
[příkazy]
}
identifikátor může obsahovat znaky anglické abecedy, číslice (nesmějí být na začátku), také znak _ (podtržítko), ale nesmí obsahovat české znaky, symboly (tečka, čárka...) nebo číslici na začátku.
Proměnné
Práce s proměnnými představuje asi největší rozdíl od ostatních programovacích jazyků. Proměnnou je v jazyku DG skupina objektů. Skupina nemusí obsahovat žádný objekt, ale může jich obsahovat i více. Objektem se rozumí např. číslo, text, bod, přímka… V jedné skupině mohou být i objekty různých typů.
a = 1; // vytvoření nové skupiny a přidání objektu typu číslo do této skupiny
a = 2; // přidání nového objektu do skupiny
přístup k jednotlivým objektů skupiny: skupina:číslo
První object ve skupině má číslo 0.
b = a:0 + a:1; | sečtení prvního objektu ve skupině a s druhým
|
c = a + b; | sečtení skupiny a (obsahuje dva objekty typu číslo) a skupiny b (obsahuje jeden objekt typu číslo), výsledek c bude skupina o dvou číslech [a:0 + b:0, a:1 + b:0]
|
d = a + c; | a a c obsahují dva objekty, výsledek bude skupina o čtyřech objektech [a:0 + c:0, a:0 + c:1, a:1 + c:0, a:1 + c:1]
|
Využití:
- zpracování více objektů najednou
- stejně pojmenované objekty (liší se jen v čísle - na rysu odlišeno buď indexem, nebo čárkami)
- funkce, které vracejí více řešení (např. průnik přímky a kružnice...)
Příkazy
Základními stavebními kameny každého programu jsou příkazy. Jazyk DG obsahuje příkaz přiřazení, volání funkce, složený příkaz, podmínku a cyklus.
Každý příkaz musí být ukončen středníkem ;.
Přiřazení
Syntax:
levá_skupina = pravá_skupina;
Tento příkaz přidá do skupiny na levé straně objekty v skupině na pravé straně. Levá skupina musí být pojmenována, na rozdíl od skupiny pravé, která může vzniknout jako výsledek nějakých operací a nemusí mít jméno. Takže levá skupina může už existovat (jako výsledek předcházejícího příkazu přiřazení) nebo se jedná o novou skupinu, která je vytvořena právě při tomto příkazu. Jako každý jiný příkaz je ukončen středníkem.
a = 5; // vytvoření nové skupiny pojmenované a a přidání objektu do této skupiny
a = 4; // přidání nového objektu do již existující skupiny
Výsledkem příkazu přiřazení je hodnota, která může být dál použita:
c = b = 5; // do skupiny b se přidá nový objekt a do skupiny c se přidá skupina b
c = (b = 5) + 1; // do skupiny b se přidá nový objekt a do skupiny cse přidá skupina b zvětšená o 1.
Co nejde:
c + 1 = 5; // skupina na levé straně nemá jméno, vznikla v průběhu příkazu, nelze tedy do ní přiřadit
c:0 = 5; // obdobně jako předchozí řádek, pokud chcete přepsat objekt ve skupině použijte funkci prepis
Přepsání hodnot
Syntax:
levá_skupina := pravá_skupina;
Přepíše hodnoty objektů v levá_skupina hodnotami v pravá_skupina. Tudíž tento
příkaz ovlivní všechny skupiny, které obsahují stejné objekty jako levá_skupina.
Pokud je počet objektů v levá_skupina větší než v pravá_skupina, pak se použijí
objekty v pravá_skupina zase od začátku.
a = 1; a = 2; // vytvoříme skupinu a, která obsahuje dva objekty typu číslo
b = a; // bobsahuje stejné objekty jako a
a:1 = 5; // druhé číslo bude změněno na 5, tedy a je [1, 5] a b je taky [1, 5]
Složený příkaz
Syntax:
{
příkazy;
}
nebo { příkazy; }
Smyslem příkazů je to, že všechny příkazy mezi { a } jsou vnímány jako jeden příkaz. Použití viz podmínky a cykly.
Podmínka
Syntax:
kdyz (logický_výraz) příkaz1;
kdyz (logický_výraz) příkaz1; jinak příkaz2;
logický_výraz - tím je myšlena jakákoliv skupina, podmínka bude vyhodnocena tolikrát, kolik je v této skupině čísel. Pokud se logický výraz vyhodnotí jako číslo různé od nuly, bude proveden příkaz1, jinak se neprovede nic (varianta bez jinak), nebo se provede příkaz2 (varianta s jinak).
Příkazem může být jednotlivý příkaz, nebo blok příkazů.
Cyklus
Syntax:
dokud (logický_výraz) příkaz;
příkaz se bude opakovat tak dlouho, dokud platí podmínka definovaná logickým výrazem.
V souvislosti s tímto příkazem je vhodné používat příkazy prepis, zvetsi, zmensi, které mění objekty ve skupině.
Příklad:
i = 1;
dokud (i <= 5) {
...
zvetsi(i); // +1
zvetsi(i, 2); // +2
zmensi(i); // -1
prepis(i, i+0.5); // +0.5
}
Pozor: příkaz i = i + 1 nezvětší i o 1, ale přidá do skupiny číslo i zvětšené o 1.
Funkce v jazyce DG
Existují dva typy funkcí:
- vracející hodnotu (tedy skupinu), která může být použita v dalším příkazu
- nevracející hodnotu, jde vlastně o skupinu příkazů,
které se však od bloku liší tím, že mohou přijímat parametry
Volání funkcí:
identifikátor_funkce ([parametr1[, parametr2...]])
Pokud funkce nevyžaduje žádné parametry nebo jí nechcete žádné předat, musí přesto její volání obsahovat (), tyto dva znaky odlišují funkci od proměnné (může existovat funkce a skupina se stejným jménem).
Deklarace funkce:
identifikátor_funkce ([[*]parametr1[,[*] parametr2...]]) {
[příkazy]
}
Pokud chcete, aby funkce vracela hodnotu, musí obsahovat příkaz vrat, který ukončí funkci a vrátí hodnotu.
Syntax příkazu vrat:
vrat skupina;
Tento příkaz může být ve funkci uveden i vícekrát (např. v podmínce), ale je proveden vždy jen jeden příkaz, protože po jeho provedení se funkce ukončí.
Pokud funkce tento příkaz neprovede (buď ho neobsahuje, nebo není proveden v důsledku nějaké podmínky) funkce nic nevrací, a nemůže být tedy použita ve výrazu, ale může být zavolána jako samostatný příkaz.
Ve funkci můžeme používat všechny skupiny definované ve funkci, která jí zavolala. Pokud použijeme příkaz přiřazení do takovéto skupiny, dojde však k vytvoření nové skupiny platné jen v této funkci, po jejím ukončení přestane existovat.
Znak * před identifikátorem parametru znamená, že tento parametr nebude předáván hodnotou, ale odkazem. To znamená, že všechny změny provedené s touto skupinou se projeví i v parametru. Odkazem mohou být předávány jen skutečné skupiny, ne výrazy.
Práce se skupinami
prepis | přepsání skupiny nebo určitého objektu ve skupině
jiným objektem |
prepis(skupina1, skupina2) | vyprázdní skupinu1 a přidá do ní objekty ze skupiny2
|
zrus(skupina) | zruší skupinu; pokud její objekty patří i do jiných skupin, nebudou zničeny
|
m(objekt1, objekt2) | vytvoří skupinu z těchto objektů |
[objekt1, objekt2] | vytvoří skupinu z těchto
objektů |
Komentáře
Komentář (poznámka) je část zdrojového textu, která bude překladačem ignorována. Zpravidla se používá pro okomentování určité části programu nebo k přechodnému vyřazení části postupu.
V jazyce DG existují dva typy komentářů. První je komentář, který se zapisuje // a výsledkem jeho použití je ignorování zbytku řádku za //. Další řádky nejsou nijak ovlivněny.
Dalším typem je blokový komentář, komentář začíná /* a končí */.
Objekt číslo
Tento objekt je vyjádřením reálného čísla. Zapisuje se v desítkové soustavě, desetinná část je oddělena ..
Operátory
| syntax | popis operace |
| a + b | sčítání |
| a - b | odčítání |
| -a | unární mínus |
| a * b | násobení |
| a / b | dělení |
| a % b | modulo, zbytek po celočíselném dělení (při této operaci je počítáno bez desetinné části čísel) |
| a ^ b | umocnění |
| a == b | rovnost |
| a != b | nerovnost |
| a <> b |
| a < b | menší |
| a > b | větší |
| a <= b | menší nebo rovno |
| a >= b | větší nebo rovno |
| a..b | vytvoří skupinu, která obsahuje celá čísla od a do b včetně |
| zvetsi(a, b) | zvětší číslo a o b |
| zvetsi(a) | zvětší číslo a o 1 |
| zmensi(a, b) | zmenší číslo a o b |
| zmensi(a) | zmenší číslo a o 1 |
Funkce zvetsi a zmensi vrací hodnotu, kterou je změněná skupina.
Logické výrazy
Pomocí čísel jsou v jazyce DG vyjádřeny i logické hodnoty. Kladnou hodnotou (true) je jakékoliv číslo různé od 0, zápornou (false) jen 0. Použít lze tyto logické operace:
| & | and, a, logický součin |
| | | or, nebo, logický součet |
| ! | not, negace |
Matematické funkce
| moc, odm | mocnina a odmocnina, mají buď je jeden parametr,
pak jde o druhou (od)mocninu, anebo dva parametry, první je číslo, druhé
je (od)mocnitel |
| sin, cos, tan, cotan | |
| sinh, cosh, tanh | |
| arcsin, arccos, arctan | |
| arcsinh, arccosh, arctanh | |
| log10, log2, ln, exp | |
| nahoda | generuje náhodné číslo |
| stupne | převod radiánů na stupně |
| radiany | převod stupňů na radiány |
Poslední dvě funkce jsou velice důležité pro zadávání úhlů jako parametrů funkcí. Všechny funkce požadují úhel v radiánech a také všechny funkce vracejí úhel v radiánech. Když budete chtít zadat úhel ve stupních jako parametr, pište funkce(…, radiany(úhel_ve_stupních), …). Pokud chcete převést výsledek na stupňovou míru, použijte stupne(funkce(…) ).
Objekt text
Tento objekt použijeme při výpisu různých zpráv do okna zpráv, pří zjiš»ování vlastností objektů nebo jejich typů. Zapisuje se mezi dvojitými uvozovkami: "libovolný text". Délka textu je omezena jen velikostí paměti.
| a + b | sčítání |
| a == b | porovnání |
| a != b |
| a <> b |
| text + číslo | převedení čísla na text a jeho přičtení k textu |
Body a vektory jsou základními pojmy analytické geometrie. Při rýsování nepotřebujeme počítat s vektory, ale pro počítač to je jediná rozumná možnost, jak popsat geometrické útvary.
Každý bod a vektor v prostoru má tři souřadnice (x, y, z). Každou ze souřadnic je reálné číslo.
Objekt vektor
Vektor lze zadat buď třemi souřadnicemi, dvěma souřadnicemi (pak z = 0) nebo bodem, jehož souřadnice budou použity jako souřadnice vektoru. Použít lze vektorovou algebru, a řešit tak jakýkoliv problém analyticky, místo řešení konstrukčního.
| u + v | součet vektorů (součet souřadnic) |
| u - v | rozdíl vektorů (rozdíl souřadnic) |
| u * v | skalární součin |
| u * cislo | násobek vektoru (souřadnice vynásobené číslem) |
| u / cislo | podíl vektoru (souřadnice podělení číslem) |
| u # v | vektorový součin |
| -u | opačný vektor |
| u == v | rovnost vektorů |
| u != v | nerovnost vektrorů |
| u <> v | nerovnost vektorů |
| v(u) | velikost vektoru |
| rovn(u, v) | rovnoběžnost vektorů |
| odch(u, v) | odchylka vektorů |
| u."x" | výsledkem je jedna souřadnice |
| u."y" |
| u."z" |
| u.1 | získání průmětu vektoru do půdorysny - 1, nárysny - 2, bokorysny - 3 |
| u.2 |
| u.3 |
Objekt bod
Zadává se obdobně jako vektor: 2 nebo 3 souřadnicemi nebo vektorem, ale jeho význam je zcela jiný. Bod je základním geometrickým útvarem a pomocí něho se určují další útvary. Každý bod je vykreslen v rysu a popsán svým názvem.
| A + B | součet bodů |
| A - B | rozdíl bodů |
| A * cislo | násobek bodu (vynásobení souřadnic číslem) |
| A / cislo | podíl bodu číslem |
| A == B | rovnost bodů |
| A != B | nerovnost bodů |
| A <> B | nerovnost bodů |
| lezi(objekt, A) | náležení bodu geometrickému útvaru (přímka, rovina, kuželosečka) |
| p(objekt, A) | průnik bodu s geometrickým útvarem; pokud na něm leží, výsledkem je sám bod, jinak nic |
| A + vektor | posunutí bodu A o vektor |
| posun(A, vektor) |
| A."x" | výsledkem je jedna souřadnice |
| A."y" |
| A."z" |
| A.1 | získání průmětu bodu do půdorysny - 1, nárysny - 2, bokorysny - 3 |
| A.2 |
| A.3 |
Bod může být zadán také v obecné rovině, k jeho určení je potřeba rovina a dvě souřadnice, podle kterých je možno bod jednoznačně určit.
bod(rovina, x, y, z) jedna ze souřadnic může být vynechána a zapsán místo ní ?
např.: bod(Ro, 5, 6, ?)
Další způsobem je zadaní bodu, který leží na přímce v určité vzdálenosti od jiného bodu.
bod(přímka, bod, vzdálenost)
Objekt přímka
Základním způsobem zadání je určení přímky pomocí dvou bodů. Druhým způsobem je bodem a vektorem. Často v deskriptivní geometrii používaným zadáním je zadání půdorysem a nárysem. Posledním způsobem zadání (nepočítáme určení přímky jako výsledku jiných funkcí) je přímka ležící v dané rovině procházející daným bodem a svírající s danou přímkou v rovině ležící daný úhel.
primka(bod1, bod2)
primka(bod, vektor)
primka(přímka1, přímka2) zadání půdorysem a nárysem
primka(rovina, přímka, bod, úhel)
Obdobně jako přímku můžeme zadat polopřímku a úsečku.
poloprimka(…)
usecka(…)
Parametry u těchto funkcí jsou stejné jako u funkce primka.
| a == b | shodnost dvou přímek, nezáleží na tom, zda jde o přímku, úsečku či polopřímku |
| a + B | posunutí přímky o vektor, jehož souřadnice jsou stejné jako souřadnice bodu |
| a - B | opačné posunutí |
| a + u | posunutí přímky o vektor |
| a - u |
| a."A" | první bod přímky |
| a."B" | druhý bod přímky |
| a."v" | vektor přímky |
| a.1 | získání průmětu přímky do půdorysny - 1, nárysny - 2, bokorysny - 3, výsledkem může být buď přímka, nebo bod |
| a.2 |
| a.3 |
Objekt rovina
Rovina může být zadána:
- třemi body neležícími v přímce -
rovina(A, B, C)
- přímkou a bodem neležícím na této přímce -
rovina(a, B)
- dvěma různými přímkami -
rovina(a, b)
rovina(x, y, z), kde číslo x (resp. y, z) je průsečík roviny a osy x (resp. y, z)
rovina(a, b, c, d) - obecná rovnice: ax + by + cz + d = 0
| Ro == Sigma | shodnost dvou rovin |
| Ro.1 | stopy roviny, jde o průnik rovin s 1 - půdorysnou, 2 - nárysnou, 3 - bokorysnou |
| Ro.2 |
| Ro.3 |
| Ro."v" | vektor roviny |
| Ro."a" | získání koeficientů z obecné rovnice
roviny |
| Ro."b" |
| Ro."c" |
| Ro."d" |
Kuželosečky
Na střední škole se v předmětu deskriptivní geometrie vyučují kuželosečky. Rýsování kuželoseček - elips, hyperbol a parabol je obtížné a proto se musíme při ručním rýsování spokojit s přibližnými metodami rýsování těchto křivek. Výhody programu Deskriptivní geometrie se v této oblasti projeví ještě výrazněji než při rýsování jednodušších objektů.
V programu je každá kuželosečka reprezentována analyticky - konkrétně obecnou algebraickou rovnicí druhého stupně v x a y. Taková kuželosečka může být zadána v půdorysně nebo nárysně nebo v rovinách s nimi rovnoběžnými. Při vykreslení kuželosečky se bere v úvahu nastavení zobrazení stejně jako u ostatních objektů
- tj. změna síly, stylu a barvy čáry, rozdělení kuželosečky na více části apod.
Výjimku tvoří kružnice, která může být zadána v obecné rovině, není reprezentována obecnou rovnicí, ale rovinou, středem a poloměrem. Na kuželosečku se převádí, až když je vykreslována (jejími
průměty může být kružnice nebo elipsa). Ostatní kuželosečky musí ležet v rovinách rovnoběžných s průmětnami. V tomto rozsahu je i učivo na střední škole.
Při řešení úloh v deskriptivě nemůžeme zadávat kuželosečky rovnicí, ale podle takových vlastností, ke kterým může dospět pomocí konstrukcí. Proto můžeme zadat kuželosečky několika způsoby:
kružnici: kruz(rovina, střed, poloměr)
Průmětem kružnice není jen kružnice, ale i elipsa, proto je v jazyce DG
kružnice dalším typem objektu, objekty typu kuželosečka jsou jen
průměty této kružnice (k.1, k.2)
elipsa(rovina, F, G, a) - rovina musí být rovnoběžná s půdorysnou a nárysnou, F a G jsou ohniska, a délka hlavní osy
elipsa(rovina, A, C, S) - A hlavní vrchol, C vedlejší vrchol, S střed
hyperbola(rovina, F, G, a)
parabola(rovina, F, d) - ohnisko F a řídící přímka d
Na tyto typy zadání lze převést jakékoliv jiné zadání a zadat tak jakoukoliv kuželosečku.
V knihovně "kuzelosecky.dk" najdete konstrukce sestrojení tečen z bodu nebo daným směrem. Bližší popis viz tato knihovna.
Lze určit průnik dvou kuželoseček a průnik kuželosečky s přímkou. Výpočet průniku dvou kuželoseček je řešením dvou rovnic vyjadřujících kuželosečky. Tato soustava může nabývat žádného, jednoho až čtyř, nebo nekonečně mnoho řešení. Nalézt je není možné pomocí matematických úprav, proto se používá numerických metod. Mezi další operace patří test náležení bodu kuželosečce, posunutí a otočení kuželosečky. Průnik roviny a kuželosečky je vlastně průnikem kuželosečky a průsečnice této roviny a roviny kuželosečky.
Pokud se jedná o středovou kuželosečku (kružnici, elipsu a hyperbolu), lze zjistit její střed pomocí operátoru . a vlastnosti "S".
S = k."S"
Další vlastnosti:
| "ro" | rovina, ve které kuželosečka leží |
| "typ" | druh kuželosečky: elipsa, hyperbola, parabola |
| "u" | odchylka osy |
| "DD", "dd" | diskriminant kuželosečky a diskriminant
kvadratických členů |
| "a11" - "a33" | koeficienty v rovnici |
| u elips a hyperbol: |
| "F", "G" | ohniska |
| "A", "B" | hlavní vrcholy |
| "C", "D" | vedlejší vrcholy |
| "h", "v" | hlavní a vedlejší osa |
| "a", "b", "e" | velikost hlavní a vedlejší poloosy,
excentricita |
| u parabol: |
| "F" | ohnisko |
| "d", "v" | řídící přímka, vrcholová tečna |
| "V" | vrchol |
| "p" | velikost parametru |
| "o" | osa |
Kuželosečky je možné posouvat a otáčet pomocí funkcí otoc a posun, výsledkem těchto funkcí je transformovaná kuželosečka.
f = posun(e, vektor(2, 5, 6));
r = otoc(p, radiany(45));
Příklady:
zadání kuželosečky vyjádřené rovnicí v půdorysně:
k = kuzelosecka(Pi, 9, 24, -18, 2, -12, 21);
kružnice:
Ro = rovina(5, 7, 8);
S = bod(Ro, -4, 3, ?);
k = kruz(Ro, S, 4);
elipsa, hyperbola a parabola:
e = elipsa(Pi, F, G, 5);
h = hyperbola(Ny, F, G, 6);
p = parabola(Pi, F, d, p);
Knihovna "kuzelosecky.dk" obsahuje i Rytzovu konstrukci elipsy zadané dvěma sdruženými
průměry.
Práce s programem
Nastavení velikosti rysu
Již před psaním postupu by mělo být jasné, jaké velikosti bude papír, na kterém bude vykreslen rys. K nastavení velikosti papíru patří i výběr jeho orientace (vodorovné nebo svislé) a nastavení okrajů, případně i rámečku, jenž bude narýsován kolem rysu.
Tyto nastavení lze provést dvěma způsoby:
- Provede je sám uživatel v dialogovém okně Nastavení tisku a Nastavení programu. Tato nastavení budou nejen pro aktivní postup, ale pro všechny ostatní.
- Nastavení jsou zapsána do postupu, a tak každý postup
má svoje nastavení, které se projeví při jeho spuštění.
Způsob 2. je pro nás výhodnější, když používáme speciální velikost. Pokud používáme obvyklou velikost A4 a svislou orientaci, nemusíme toto nastavení zapisovat do postupu.
papir(výška, šířka, orientace [, měřítko])
výška a šířka jsou velikosti papíru v centimetrech, orientace může být buď 1 (svisle), nebo 2 (vodorovně). Měřítko udává velikost jednoho centimetru na rysu.
okraj(horní, dolní, levý, pravý, vnitřní, tlouš»ka_čáry, styl_čáry)
velikost okrajů v centimetrech, vnitřním okrajem je myšlena vzdálenost mezi kreslenými útvary a okrajovou čáru, na kterou nebude kresleno. tlouš»ka_čáry může nabývat hodnot od 0 výše. styl_čáry může být 0 - plná, 1 - čárkovaná, 2 - čerchovaná, 3 - tečkovaná, 4 - čárka-tečka-tečka.
Výběr zobrazovací metody
Základní zobrazením používaným v programu je Mongeovo promítání. Toto promítání je nastaveno, aniž musíte něco psát. Mezi další promítání, které program (bude) ovládá je kótované promítání a zobrazení jen půdorysu bez kót (jde vlastně jen obyčejný dvourozměrný papír). Další možné zobrazovací metody jako kosoúhlé promítání, axonometrie a perspektiva jsou náměty pro rozšíření programu v budoucnosti.
zobrazeni("mongeovo") // nastaví Mongeovo promítání
zobrazeni("kotovane")
zobrazeni("papir")
Důležitým nastavením je posun souřadnicové soustavy. To umožňuje příkaz posunutipss(x, y).
posunutipps(2, -2) posune počátek souřadnicové soustavy dva centimetry doprava a nahoru.
Použití knihoven
Ve složitějších postupech se opakují nejen základní konstrukce, ale i další postupy, které jsou stejné, liší se pouze objekty, se kterými se provádí. Protože by bylo zbytečné psát podobné postupy vícekrát, můžeme naprogramovat funkci, která provede tento postup se svými parametry, které mohou být při každé jejím volání jiné.
Některé takto vytvořené funkce jsou vhodné i pro jiné postupy, a proto je vhodné umístit do jiného souboru - knihovny, která může být použita při psaní každého postupu. Toto zajistíme pomocí příkazu
#vloz "soubor_s_knihovnou.dk".
A jak vypadá knihovna: na rozdíl od obyčejného postupu
neobsahuje funkci hlavni, ale obsahuje funkce, které mohou být použity v jiném
postupu. Knihovna může také používat funkcí z jiných knihoven, kromě sebe samé.
Při používání více knihoven hrozí nebezpečí, že některé funkce se stejným názvem
budou obsaženy ve více knihovnách. V tom případě ohlásí program chybu a
uživateli nezbývá nic jiného, než funkce přejmenovat.
Způsob vykreslení objektů
Způsob vykreslení geometrických útvarů - velikost, tlouš»ka, barva, styl bodů a čar - jsou důležité pro přehlednost rysu. Např. důležité čáry rýsujeme tlustší, pomocné konstrukce slaběji, jiný styl čar použijme, když je čára viditelná (použije plnou čáru), nebo když není vidět (použijeme čárkovanou čáru), čerchovaně kreslíme např. osy těles nebo konstrukce v otočení.
Akce nastavení probíhá ve dvou úrovních:
- standardní nastavení pro všechny rysy a postupy v dialogovém okně Nastavení programu
- nastavení jen některých objektů pomocí příkazů uvedených v postupu
Způsob vykreslení může být jiný v půdorysu i v nárysu.
videt(objekt, [část,] plán, viditelnost, [[velikost_bodu, styl_bodu], tlouš»ka_čáry, styl_čáry])
| plán | 1 - půdorys, 2 - nárys, vse - půdorys i nárys |
| část | část objektu, kterou bude platit nastavení, pokud
je vynechána platí první část, je možné použít identifikátor vse pro
nastavení všech částí |
| viditelnost | 0 - nejde vidět, 1 - je vidět jen v kladné části
souřadnicové soustavy, 2 - jen v záporné, 3 - v celé souřadnicové
soustavě |
| velikost_bodu a styl_bodu jsou nastavení nejen pro bod, ale i
pro přímku, protože speciálním přímky zobrazením může být bod. Pokud je
chcete ponechat v předešlém stavu napište místo hodnot ? |
| velikost_bodu | je zadána v centimetrech a vyjadřuje poloměr jeho
velikosti, pokud je velikostí 0, bude vykreslen jako jeden pixel (nejmenší
zobrazitelný pod na monitoru nebo tiskárně); velikost -1 určuje, že bod
nebude vidět - to je důležité u malých čar (například vniklých spojením
bodů z bodové konstrukce, které jsou blízko u sebe) |
| styl_bodu | 0 - křížek +, 1 - průhledné kolečko (je pod ním
vidět čára), 2 - bílé kolečko ˇ, 3 - barevné kolečko l |
| tlouš»ka_čáry | vyjadřuje velikost v pixelech, může nabývat hodnot
od 0 výše |
| styl_čáry | 0 - plná, 1 - čárkovaná, 2 - čerchovaná, 3 -
tečkovaná, 4 - čárka-tečka-tečka. |
barva(objekt, [část,] [plán, ] název_barvy)
název_barvy text s názvem barvy, "cerna", "bila" , "modra" , "zelena" , "cervena" , "zluta" , "seda"
Velmi důležitou vlastností je rozdělení jednoho objektu na více částí, které pak jsou vykreslit jiným způsobem. Rozseknutí útvaru se děje pomocí několika přímek, každá přímka vymezuje kladnou polorovinu, ve které smí ležet body objektu. Pokud potřebuje zápornou polorovinu, stačí zapsat body v opačném pořadí. Zadaní jedné podmínky zapíšeme příkazem sek, zapsání dalších podmínek pro stejnou část dosáhneme přidáním další příkazu sek.
sek(objekt, [část,] plán, A, B, znaménko)
| část | nastavení části, ke které se příkaz vztahuje,
platí stejné podmínky jako u předešlých příkazů (pokud je vynechána platí
první část, je možné použít identifikátor vse pro nastavení všech
částí) |
| A, B | body určující přímku a polorovinu (přímka je
převedena do obecné rovnice, a polorovina je pak určena takto: ax + by + c
> 0). Z toho vyplývá, že pokud zapíšeme body v obráceném pořadí,
vyjádříme tak opačnou polorovinu. |
| znaménko | tento parametr ovlivňuje nastavení celé části (ne
pouze jedné podmínky), rozhoduje poslední příkaz, který tuto hodnotu mění.
Může nabývat hodnot 0 nebo 1. Pokud je nastaven na 1, je vykresleno to, co
odpovídá podmínkám, když na 0, je vykresleno to, co jim
neopovídá |
Pomocí příkazů videt, barva a sek můžeme nastavit nejrůznější způsoby vykreslení, ale jejich použití je složité a zdlouhavé. V praxi je často potřeba rozdělit čáru (přímku nebo kuželosečku) na několik částí podle bodů, které na ní leží. Způsob vykreslení se pak po částech střídá. Tím lze jednoduše nastavit viditelnost (střídají se části viditelné a neviditelné).
rozdel(objekt, plán, tlouš»ka_čáry1, styl_čáry1, tlouš»ka_čáry2, styl_čáry2, bod1, bod2, …)
| tlouš»ka_čáry1, styl_čáry1 | způsob vykreslení lichých čar |
| tlouš»ka_čáry2, styl_čáry2 | způsob vykreslení sudých čar |
| bod1, bod2, … | body, podle kterých bude čára
rozdělena |
Body musí být uvedeny v pořadí, jak leží na křivce! Proto existuje funkce seradbnp(přímka, body…), která seřadí body podle toho, jak leží na přímce (vrací skupinu seřazených bodů).
U kuželoseček funguje funkce téměř stejně. U kuželoseček nedochází k jejich uzavření (spojení posledního a prvního bodu), lze tak zobrazit jen část křivky. Pokud mezi dva body napíšete jako parametr číslo 1, budou tyto dva body spojeny delším obloukem, jinak se spojí kratším obloukem.
Popis objektů
Popis objektů je nezbytnou součástí programu, protože umožňuje orientaci ve složitějších rysech. Každý objekt, který je zobrazen je popsán podle obvyklých pravidel pro popisování. Každý objekt je popsán svým identifikátorem a svým číslem ve skupině. Číslo ve skupině je napsáno jako horní index. Při počtu objektů ve skupině do tří (čísla 0, 1, 2), jsou číselné indexy nahrazeny čarami. U prvního objektu ve skupině je index vynechán. Písmo a velikost lze nastavit v okně Nastavení….
V případě, že několik objektů je vykresleno na stejné místo, projeví se to i v popise, kdy takový objekt popsán jedním popisem v eformátu A=B=C.
Popis v žádném případě nesmí překrývat jiný popis nebo bod. Pokud je to možné, nepřekrývá ani čáry. Vhodné (prázdné) místo pro popis ve složitějších rysech je někdy daleko od původního místa, a tak je vhodnější umístit popis sice přes čáru, ale na bližší místo.
Rozdíly jsou v popisu v různých promítáních:
- v Mongeově promítání je objekt zobrazen dvakrát - v půdorysu a nárysu -, a tudíž je nutné každé zobrazení zvláš» popsat - odlišují se dolními indexy za názvem.
- v kótovaném promítání se u bodů přidává kóta - závorka s třetí souřadnicí bodu
To, zda bude objekt popsán lze nastavit příkazem popis(objekt, plán, viditelnost, [jiný popis]).
| objekt | objekt, u něhož bude nastavení provedeno |
| plán | 1 = půdorys, 2 = nárys, vse = obojí |
| viditelnost | nastaví, zda bude popis zobrazen; 0 = nebude, 1 = určeno automaticky (nejsou vidět přímky totožné s osou x), 2 = vždy bude vidět |
| jiný popis | volitelný parametr; normálně je tvar popisu určen pravidly uvedenými výše, pokud chcete použít jiný, můžete jej nastavit zde. Přitom lze použít tyto proměnné: #^ = horní index (obsah), #_ = dolní index, #( = kóta, #N = jméno objektu; a tyto příkazy: ^text = horní index a _text = dolní index, \btext = tučně, \itext = kurzíva, kde text je jeden znak nebo {více znaků}. |
Exisuje ještě jedna možnost, jak psát text na rys, a to příkaz:
napis(počáteční bod, text, název fontu, výška fontu v cm, pozice (0 = pevná, 1 = plovoucí (jako popis objektů))).
Obsahem parametru text je nápis, který se má napsat na rys. Může obsahovat stejné příkazy jako jiný popis. V tomto nápisu nedochází ke konverzím typu alfa na řecké alfa. Pokud chcete použít řecké písmeno, napište @x, kde x je znak, který bude zobrazen v řeckém fontu.
Na rys lze také vkládat obrázky ze souborů ve formátech BMP, WMF a EMF pomocí příkazu:
obraz(počáteční bod, koncový bod, název souboru s obrázkem, pozice (0 = pevná, 1 = plovoucí).
Obrázek bude roztažen mezi půdorysy počátečního (musí být levý horní) a koncového (pravý dolní) bodu. Pořadí vykreslení obrázků zavisí na uvedení v postupu. Pokud bude uveden na začátku, bude překreslen ostatními objekty. Naopak, když bude na konci, bude nade všemi objekty.
Konstrukce
Konstrukce jsou vlastně funkce, které vytvářejí z několika vstupních objektů (parametrů) objekt, který je výsledkem této konstrukce. Mnoho z následujících konstrukcí jde zapsat pomocí několika jiných příkazů, ale program je přesto ovládá z důvodu jednoduššího použití (stačí napsat jeden příkaz) a větší rychlosti (v programu DG jsou naprogramovány většinou podle vztahů analytické geometrie, kterou je počítač schopen rychleji a přesněji zpracovat).
Bod ležící v rovině
Bod nemusí být zadán právě třemi souřadnicemi, ale tím, že leží v určité rovině a jeho dvě souřadnice jsou zadané, ta třetí bude dopočítána (v případě, že takové zadání jednoznačně určuje bod).
bod(rovina, x, y, ?) nebo bod(rovina, x, ?, z) nebo bod(rovina, ?, y, z)
Rovnoběžky a kolmice
| přímka rovnoběžná s přímkou vedená bodem | rovnobezka(přímka, bod) |
| přímka v rovině rovnoběžná s přímkou v určité vzdálenosti od této přímky | rovnobezka(rovina, přímka, vzdálenost) |
| přímka v rovině kolmá ke přímce vedena bodem | kolmice(rovina, přímka, bod) |
| přímka kolmá ke přímce vedená bodem | kolmice(přímka, bod) |
| přímka kolmá k rovině vedena bodem | kolmice(rovina, bod) |
Rovnoběžné a kolmé roviny
| rovina rovnoběžná s rovinou vedená bodem | rovnobezna(rovina, bod) |
| rovina kolmá k přímce vedená bodem | kolma(přímka, bod) |
Sklápění a otáčení
Tyto dvě konstrukce patří mezi základní operace, bez kterých se neobejde většina řešení úloh středoškolské deskriptivní geometrie.
Tyto konstrukce lze naprogramovat v pomocí jiných konstrukcí, které už v jazyce DG existují. Najdete je v knihovně monge_sklop.dk, jsou určené pro Mongeovo promítání. Jde však o často používanou konstrukci proto je naprogramována jako součást jazyka DG, aby její provádění bylo co nejrychlejší.
Jde o funkce otoceni, otoceniz, notoceni, notoceniz. (z znamená zpět, n nárysna)
Funkce otoceni a notoceni mají dva parametry: skupina objektů (bodů) a hlavní přímku I. osnovy roviny, kolem které se bude bod otáčet. Výsledkem je skupina otočených objektů.
Funkce otoceniz a notoceniz mají opačnou funkci: bod ležící v půdorysně (nárysně) otočit zpět do roviny. Požadují tři parametry: skupinu, která se bude otáčet, rovinu, do které se bude otáčet, a hlavní přímku I. osnovy této roviny. Výsledkem je opět skupina otočených objektů.
Funkce pro sklápění jsou obdobné: sklopeni, sklopeniz, nsklopeni, nsklopeniz.
Tyto funkce mají dva parametry: bod, který se bude sklápět, a přímku, kolem které se bude sklápět.
Průnik
p(objekt1, objekt2)
Funkce p funguje pro všechny základní objekty (bod, přímka, rovina, kuželosečka). Pořadí zápisu objektů má být v tomto pořadí: kuželosečka, rovina, přímka, bod. Výsledkem této funkce může být skupina jakýkoliv objektů. Pokud je nastane případ prázdného průniku, je výsledem speciální typ nic. Funkce prunik řeší průnik analyticky, což je rychlejší než řešení konstrukční.
Mnohoúhelník
Často používaným útvarem je mnohoúhelník, který je zadán více než dvěma body. V programu není reprezentován jako nový typ objektu, ale jako skupina úseček. Takový mnohoúhelník lze vytvořit pomocí funkce nuhelnik.
nuhelnik(bod1, bod2, …, bodn) vytvoří skupinu úseček (první vede z bod1 do bod2, druhá z bod2 do bod3, poslední z bodn do bod1).
Bodová konstrukce
Řešením složitějších úloh (např. průnik dvou válců v obecné poloze) není křivka, kterou známe, umíme matematicky popsat a zobrazit. Jediné, co dokážeme pomocí konstrukcí vytvořit je množina bodů, které náleží křivce. Tyto body pak na papíře spojíme do jedné křivky. Totéž musíme udělat na počítači. Protože body vzniklé z bodové konstrukce většinou nenásledují přesně po sobě, nemůžeme použít funkce nuhelnik. Nejdříve musíme body uspořádat tak, aby následovaly po sobě. Může nastat několik případů:
- Pokud je výsledkem každé dílčí bodové konstrukce nejvýše jeden bod, pak tyto body většinou následují po sobě (to lze ověřit v inspektoru objektů) a lze je spojit funkcí
nuhelnik nebo ncara.
- Výsledkem jsou dva nebo více bodů, které sice nejdou po sobě, ale lze je tak uspořádat, protože např. z dvou bodů patří jeden do první poloviny a druhý do druhé poloviny křivky. V tomto případě je nutné vědět, jakým způsobem body vznikají a podle toho je pak přerovnat. To lze udělat pomocí několika cyklů:
// sudé v normálním pořadí
i = 0;
dokud (i < pocet(R)) {
NR = R:i;
zvetsi(i, 2);
}
zrus(i);
// liché obráceně
i = pocet(R)-1;
dokud (i >= 0) {
NR = R:i;
zmensi(i, 2);
}
zrus(i);
Pro zjednodušení používání těchto akcí je v jazyce DG připraveno několik funkcí:
usp(počet_částí, [-]část1, [-]část2, …, body…)
počet_částí hodnota toho parametru je počtem bodů z jednotlivé konstrukce, rovná se počtu částí křivky
část číslo části; pokud je záporné, bude pořadí bodů obrácené
body jedna nebo více skupin, obsahující body
Provedení těchto zabudovaných funkcí je samozřejmě rychlejší než provedení obdobných funkcí zapsaných v jazyce DG.
- Celkovým výsledkem je skupina bodů, které nejdou po sobě a nejde je uspořádat. Takové body lze spojit do jedné křivky pomocí funkcí
body, bodys, bodyn nebo bodysn. Tyto funkce spojí jednotlivé body tak, že je vždy spojen nejbližší s nejbližším podle jejich vzdáleností v půdoryse a náryse zvláš».
body(bod1, bod2, …, bodn) vytvoří skupinu čar z bodů
bodys navíc je spojen první a poslední bod
bodyn, bodysn pro nárys
Příklad:
Tento příklad ukazuje jeden způsob, jak je možné provést bodovou konstrukci pomocí cyklu dokud. V tomto případě se mění výška a v každé výšce se provádí tatáž konstrukce.
rez (z) {
. . . // vlastní postup jednotlivé konstrukce
vrat X; // X je nějaký bod
}
z = 0.5; // počáteční výška
krok = 0.1; // krok v cm, tento krok lze libovolně změnit (čím menší číslo, tím větší kvalita, ale delší výpočet)
dokud (z <= 4.5) { // cyklus omezen maximální výškou
R = rez(z); // jednotlivá konstrukce
prepis(z, z+krok); // zvetšení výšky
}
Dále podle výše uvedených případů:
1. Body spojíme do jedné křivky funkcí nuhelnik
cR = nuhelnik(R); nebo cR = ncara(R);
2. Skupina bodů se skládá ze dvou částí, které jsou do sebe vloženy. Proto je funkcí usp přerovnáme:
NR = usp(2, 1, -2, R);
cR = nuhelnik(NR); nebo cR = ncara(NR);
3. Skupina R obsahuje řadu bodů, ty spojíme do jedné křivky pomocí funkce bodys:
cR = bodys(R); // půdorys
cR2 = bodysn(R); // nárys
Toto platí pro všechny tři případy:
videt(R, vse, 0); // schováme původní body
videt(cR, 1, 1, 1, 0, 0, 2, 0); // část křivky cR v kladné části silnější plnou čarou
videt(cR, 2, 1, 3, 0, 0, 1, 3); // část křivky cR v záporné části tečkovanou čarou
Analytická geometrie
Program DG obsahuje i funkce známé z analytické geometrie. Dají se rozdělit do dvou skupin:
- zjistitelné na papíře hned pomocí pravítka nebo úhloměru - jedná se o útvary v rovině rovnoběžné s půdorysnou či nárysnou
- k jejich zjištění je provést určité konstrukce - útvary v prostoru
Funkcím programu DG je jedno, zda se jedná o případ 1. nebo 2.
Funkce 2. používejte v případě, že umíte provést obdobnou konstrukci a chcete použít funkci, která je zabudovaná v programu, a je tedy rychlejší.
Velikost
v(vektor) velikost vektoru
Vzdálenost
Výsledkem je vzdálenost.
v(bod, bod) vzdálenost dvou bodů
v(přímka, bod) vzdálenost bodu od přímky
v(rovina, bod) vzdálenost bodu od roviny
Rovnoběžnost
Výsledem je logická hodnota.
rovn(přímka, přímka) jsou přímky rovnoběžné?
rovn(rovina, přímka) je rovina rovnoběžné s přímkou?
rovn(rovina, rovina) jsou roviny rovnoběžné?
rovn(vektor, vektor) jsou vektory rovnoběžné?
Kolmost
Tuto metrickou vlastnost lze popsat pomocí odchylky. Pokud je odchylka 90°, jsou útvary k sobě kolmé.
Odchylka
Výsledkem je úhel v radiánech.
odch(přímka, přímka)
odch(rovina, přímka)
odch(rovina, rovina)
odch(vektor, vektor)
Vyplňování oblastí
Pro vyplňování oblastí byl zvolen poměrně jednoduchý způsob zadání plochy. Zadáte okrajové křivky (jakýkoliv objekt - přímka, kuželosečka…) a jeden bod. Vybarvena bude oblast kolem tohoto bodu, dokud nebude dosáhnuto hraniční křivky. Jde o podobný jako u grafických programů.
Existují dvě funkce vypln a vypln2. Rozdíl je v tom, že funkce vypln předkreslí všechny okrajové čáry plně a tence, zatímco vypln2 ponechá jejich styl. Tyto funkce nemají vliv na vykreslení těchto čar ve výsledném rysu, pouze je ovlivňují pro výplň.
Syntax: vypln[2](bod, plán, barva, styl_výplně, ohraničení)
Pokud chcete uvést více bodů nebo více křivek do ohraničení, použijte vytvoření nové skupiny: vypln([A, B], 1, RGB(100, 200, 50), 0, [a, b, c]);
styl_výplně může být 0 - plný, 1 - 6 různé druhy šrafování: čárky vodorovné, svislé, 45o, 135o, mříž, mříž otočená o 45o. Výplně jsou modifikovatelné, nacházejí se v adresáři Výplně. Rozlišují se na výplně pro tiskárnu (s větším rozlišením) a pro monitor (s nižším rozlišením). Maximálně může vytvořit až 100 různých výplní.
Jiné promítací metody
V programu Deskriptivní geometrie verze 1.1 jsou zabudovány dvě promítací metody, které zobrazují trojrozměrné útvary: kótované promítání a Mongeovo. To neznamená, že nemůžete vytvořit rys v axonometrii nebo jiném promítání. Lze to řešit stejným způsobem, jako kdyby se rýsovalo na papíře. Nastavíte zobrazeni("papir"). Pokud chcete vytvořit bod, nemůžete použít funkci bod(x, y, z), ale je třeba napsat postup, kterým vytvoříte bod ve vašem promítání. Je vhodné tento postup zapsat jako funkci.
K programu je dodávána knihovna "axonometrie.dk", která pracuje na uvedeném principu. Je před začátkem rýsování je třeba nastavit axonometrii: velikost axonometrického trojúhelníku, osy, sklopené osy; tato nastavení jsou používána dalšími funkcemi jako je abod(x, y, z), která vytvoří dva body: axonometrický průmět bodu o zadaných souřadnicích a jeho půdorys. Knihovna obsahuje i další konstrukce pro axonometrii, nedělá si však nárok na úplnost. Jde jen o příklad toho, jak lze program rozšířit na uživatelské úrovni.
Aktualizace: 12. 9. 2005