OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 29.03.2024, 13:50

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 100 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7  Další
Autor Zpráva
PříspěvekNapsal: 16.05.2020, 16:10 
Offline
Profík

Registrován: 15.01.2014, 20:08
Příspěvky: 783
Bydliště: Šlapanice
Has thanked: 129 times
Been thanked: 97 times
Konkrétně co jsou, na začátku vlákna pochází z dokumentace ke stavbě souřadnicového zapisovače ALFI. Jsou tam jako ukázka toho co se sním, dá dělat ale program jak nato tam není a pokut jsem něco našel tak to byli spíše ty 3D funkce. Ta ne 3D čárová grafika není v principu nic složitého pokut výš na jakém principu je to založeno. U těch 3D grafu funkcí je největší oříšek vyřešit viditelnost ale i na to existuje trik jak to obejit, není to ulně dokonalé, aneb jde o kompromis aneb 8bity by to počítali neúměrně dlouho.

_________________
Ne všichni jsme měli z češtiny za jedna, aneb jsem dyslektik a dysgrafik.

http://www.sapi.cz/


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 16:42 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3767
Has thanked: 269 times
Been thanked: 452 times
Nojo, HW Z-buffer se u těchto titánů konce 70.let ještě moc často neimplementoval. Nedávno jsem si v té velké publikaci k pokročilé ZXSpetrovské grafice co tu dobrá duše dala četl část, která se průhledností objektů též zabývá a i u dost primitivních scén trvá Z80 vykreslování 1 framu v řádu minut. Bez specializovaných obvodů ve stylu FPU se na 8bitech jedná pouze o hříčku, byť sw realizovatelnou.


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 18:09 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1972
Bydliště: Most, Praha
Has thanked: 864 times
Been thanked: 697 times
Přepsal jsem Ladislavův program do Gemtree Peter:

program ke stažení (pro Windows): http://www.breatharian.eu/!/LineArt.zip
- Nelekněte se kdyby některý antivirus hlásil neznámý virus, antivirům se nelíbí nestandardní exe loader, typicky Kaspersky rád plaší.

Ukázka části "zdrojáku" :-) :
Příloha:
LineArt1.jpg
LineArt1.jpg [ 28.32 KiB | Zobrazeno 8547 krát ]

Příloha:
LineArt2.jpg
LineArt2.jpg [ 57.6 KiB | Zobrazeno 8547 krát ]

Příloha:
LineArt3.jpg
LineArt3.jpg [ 43.67 KiB | Zobrazeno 8547 krát ]

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 18:20 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
GOTO jsem nezmiňoval, to je od vynálezu strukturovaného programování sprosté slovo ;-)

Ono bylo sice dávno dokázáno, že pouze pomocí větvení a cyklů je možné naprogramovat jakýkoliv algoritmus, ale Wirth ho v Pascalu přesto nechal, protože někdy se prostě hodí: http://www.idemployee.id.tue.nl/g.w.m.rauterberg/lecturenotes/PascalRevisedReport(Wirth).pdf Mám tu někde jednu starou učebnici Pascalu, která je na používání GOTO založená. A je to dost hrozný pohled :o

A diskutuje se o tom už od Dijkstry: https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf

Obrázek

V Pascalu GOTO skáče na label, který se musí předem deklarovat v sekci "label", ještě před konstantami a proměnnými, takže v okamžiku kdy překladač dojde ke GOTO už název toho labelu zná. Konkrétní hodnotu pak může do kódu doplnit dodatečně, v okamžiku kdy se k umístění labelu dopracuje. Pro jazyk fungující rekurzivně to není problém, to není problém, to není problém :-D

Ještě zajímavější to mohlo být u ranných překladačů Pascalu, které neprodukovaly spustitelný kód, ale přenositelný P-code pro virtuální stroj. Dávno před Javou. V knize Algoritmy+Data=Programy Niklaus Wirth popisuje jednoduchý interpret - P-code machine - se třemi registry a osmi základními instrukcemi. Jeho implementace v Pascalu má necelých 80 řádků.

Ale to už je dávná historie, protože Pascal je skutečný oldcomp jazyk, letos slaví právě padesáté narozeniny, takže je jenom o trošičku mladší než BASIC.



Před ELSE a END středník být nemusí, protože to nejsou příkazy. Jsou to pouze "uvozovky", které ukazují odkud kam sahají jednotlivé struktury v programu. Teorie říká, že každá struktura - příkaz - je blok s jedním vstupem a jedním výstupem. Takže celý program je z hlediska systému také příkaz, s jedním vstupem a jedním výstupem. Každý příkaz je v červeném rámečku, a celý program je ten úplně největší. Také jsou podle vnoření odstupňované šedě.
Uvnitř něj jsou zřetězené jednotlivé struktury, oddělené středníkem. Což jsou na flowchartu jednoduchého prográmku níže deklarace názvu programu, deklarace jednotlivých typů, a deklarace příkazové části. A na konci programu je samozřejmě tečka, stejně jako na konci věty.
Ta příkazová část se skládá ze dvou zřetězených příkazů, oddělených středníkem. Je to ten druhý menší rámeček.
První příkaz je cyklus, který načte z klávesnice deset čísel a uloží je do pole. Celý cyklus má jeden vstup a jeden výstup. A je v malém rámečku vlevo.
Druhý příkaz je podobný cyklus, má také jeden vstup a jeden výstup, je v trochu větším rámečku vpravo.
V něm je vnořený příkaz provádějící větvení, které první buňku pole a ostatní s číslem stejným nebo větším vypíše na obrazovku tak jak jsou, a ty s menším číslem s opačným znaménkem. Jednotlivé části úplného větvení jsou oddělené ELSE. Větvení je samozřejmě také blok s jedním vstupem a výstupem, a je ve vlastním rámečku:
Příloha:
deset.png
deset.png [ 5.87 KiB | Zobrazeno 8531 krát ]

Tolik říká teorie strukturovaného programování, a je to ideální způsob psaní programů pro pojídače koláčů. Všechno si krásně nalinkovat, rozložit do nejmenšího detailu, nikde se žádné čáry nesmí zkřížit, nikde se neskáče někam do neznáma. Celý kód se dá projet tužkou na papíře a dobře se v něm hledají začátečnické chyby, což je jeden z důvodů proč je Pascal vhodný výukový jazyk.

Pascalské CASE je trochu výjimka, protože nemá BEGIN. Bacha na to že v Pascalu tohle funguje úplně jinak než v C! Zatímco céčkový SWITCH je prostě GOTO do libovolného místa v sekvenci příkazů (ze které se dá pomocí BREAK kdykoliv vyskočit nebo naopak bez něj pokračovat do následující části), pascalské CASE je obdoba IF - ELSE IF - ELSE IF... Je to skutečné mnohonásobné větvení.



Neexistuje nic, co by překonalo eleganci příkazu PAR v Algolu 68. Dokonce ani Ada se tomu nevyrovná. Tolik k paralelizmu.

Válcování plechu? To mi připomnělo, jak Rusové při stěhování fabrik na útěku před Němci ztratili jednu stolici z linky na válcování pancéřových desek. Když to pak sestavili a chtěli vyrábět tanky, tak jim nezbylo než na těch zbylých přitlačit o něco víc, s překročením povolených limitů. Následkem toho byly pancíře T-34 ještě tvrdší a odolnější než původně měly být...



Tak jsem se vrhnul na ten program GRAFIK a přepsal ho do Turbo Pascalu (TP7 pod DOSBoxem). Ale potřeboval bych informaci, jaký je rozdíl mezi QORG a QMOVA. Ten druhý chápu, ale co přesně dělá ten první? Tipnul bych si že nastavuje nulový bod, od kterého se počítají souřadnice, do libovolného místa papíru, takže by se mohlo pracovat nejenom s kladnými hodnotami ale i se zápornými. Je to tak?
Příloha:
GRAFIK.png
GRAFIK.png [ 9.96 KiB | Zobrazeno 8543 krát ]

Obraz je otočený o 90° doleva, zmenšený na třetinu kvůli VGA rozlišení, a tady je prozatímní zdroják:
Kód:
PROGRAM GRAFIK;
(*CAROVA GRAFIKA*)

uses Graph;



VAR OX,OY,
    X1,Y1,X2,Y2,X3,Y3,
    X4,Y4,X5,Y5,X6,Y6:INTEGER;
    karta,rezim:integer;
    penx,peny,penspeed:integer;



procedure qorg(x,y:integer);

          begin
          penx:=y;
          peny:=x
          end;



procedure qspeed(v:integer);

          begin
          if (v<0) or (v>5) then v:=5;
          penspeed:=30000 div (v+1)
          end;



procedure qmova(x,y:integer);

          begin
          penx:=x;
          peny:=y
          end;



procedure qvecta(x,y:integer);

          var t:integer;

          begin
          line(peny*3 div 10,479-penx*3 div 10,y*3 div 10,479-x*3 div 10);
          penx:=x;
          peny:=y;
          for t:=penspeed downto 0 do;
          end;



PROCEDURE MINI(X1,Y1,X2,Y2,X3,Y3:INTEGER);

          CONST   J = 50;      (*ROZLISITELNOST KRESBY*)
                  N = 50;      (*DELENI*)

          VAR I,X,Y : INTEGER;

          BEGIN
          QMOVA(X1,Y1);
          FOR I:=1 TO J DO
              BEGIN
              IF I MOD 2=1 THEN      (*KRESLENI JEDNIM TAHEM TAM*)
                 QVECTA(X1,Y1)
              ELSE
                 QVECTA(X3,Y3);
              X :=(X2-X1) DIV N+X1;
              Y :=(Y2-Y1) DIV N+Y1;
              X2:=(X3-X2) DIV N+X2;
              Y2:=(Y3-Y2) DIV N+Y2;
              QVECTA(X2,Y2);
              X3:=(X1-X3) DIV N+X3;
              Y3:=(Y1-Y3) DIV N+Y3;
              X1:=X;
              Y1:=Y;
              IF NOT(I MOD 2=1) THEN   (*KRESLENI JEDNIM TAHEM ZPET*)
                 QVECTA(X1,Y1)
              ELSE
                 QVECTA(X3,Y3)
              END
          END;



BEGIN
karta:=9;
rezim:=2;
initgraph(karta,rezim,' ');
floodfill(0,0,15);
setcolor(0);

OX:= 750;OY:= 750;         (*STRED KRESBY - NENI PODMINKOU*)
X1:= 750;Y1:= 500;         (*KONCOVE SOURADNICE KRESBY*)
X2:=1500;Y2:=   0;
X3:= 900;Y3:=2100;
X4:= 750;Y4:=2100;
X5:= 600;Y5:=2100;
X6:=   0;Y6:=   0;
QORG(OX,OY);QSPEED(5);

MINI(X2,Y2,OX,OY,X1,Y1);      (*PORADI BODU OVLIVNUJE SYMETRII,*)
MINI(X6,Y6,OX,OY,X1,Y1);      (*TVAR KRESBY ATP *)
MINI(X2,Y2,OX,OY,X3,Y3);
MINI(X6,Y6,OX,OY,X5,Y5);
MINI(X3,Y3,OX,OY,X4,Y4);
MINI(X5,Y5,OX,OY,X4,Y4);

readln;
closegraph;
END.


P.S. Přidáno nastavení rychlosti kreslení. 0 = nejpomaleni, 5 = nejrychleji.

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Naposledy upravil faraon dne 16.05.2020, 19:20, celkově upraveno 2

Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 18:40 
Offline
Profík

Registrován: 15.01.2014, 20:08
Příspěvky: 783
Bydliště: Šlapanice
Has thanked: 129 times
Been thanked: 97 times
Popis příkazu je např. zde, i když pro IQ151 a má to trochu jiné jména ale a ano ORG X, Y přesune psisátko na pozici X, Y a tam vynuluje souřadnice.

_________________
Ne všichni jsme měli z češtiny za jedna, aneb jsem dyslektik a dysgrafik.

http://www.sapi.cz/


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 19:37 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
Já jsem koukal sem a nejsem si úplně jistý významem. Navíc v tom programu je nastavení středu OX:= 750;OY:= 750; a přitom se kreslí na X3:= 900;Y3:=2100;, takže by to mělo vyjet z papíru?

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 20:24 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3767
Has thanked: 269 times
Been thanked: 452 times
Je to opravdu zajímavá hodnota. Plotry řady XY mají fyzické rozlišení 2550x1700 bodů (1bod=0.1 mm), Minigraf 1500x2100 tak by to mělo rozsahově pořád zůstat uvnitř stránky. Je to pozice 21 na 9cm. Zase ta nula uprostřed umožňuje jít pohodlně při vykreslování do +750 a -750, je to příjemné třeba pro elipsy nebo funkce s rozlišením 1500x1500. Samozřejmě se tomu dá "pomoct" přičítáním hodnot k výpočtu aby se bod 0,0 umístil třeba v levém dolním rohu ale je to za nějaký čas navíc. Asi tam někde cestou dojde k přepočtu (?), mimo funkce co lítají do -x a -y je to opruz. Je tam napsáno že to nic nekontroluje tak se dá asi klidně ze souřadnic vyjet (ale když máte pás papíru, tak tam to zase tak nevadí, do jedné strany pak můžete kreslit do aleluja).


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 20:49 
Offline
Profík

Registrován: 15.01.2014, 20:08
Příspěvky: 783
Bydliště: Šlapanice
Has thanked: 129 times
Been thanked: 97 times
Ten PACKAL z AMOSe používá pravě ten ovladač, na který jsem dal odkaz. ORG po založení papíru provede nastavení pisátka do výchozí polohy a to je horní levý roh papíru. Potom přesune pisátko na souřadnice udané v parametru ORG, pokut ty byli 0,0 tak neudělá nic, ale jinak přejede na dané souřadnice a udělá počátek souřadnic.

Asi nejjednodušší bude do toho PACKALu dodělat výpis na obrazovku, co z toho vlastně leze. Ale jak se na to koukám tak ten ORG by měl být správně se souřadnicí 0,0 a to OX a OY je střed toho obrazce

Jinak ten PACKAL z AMOSe přepokládá MINIGRAF ale pokut bude mít ovladač pro XY41xx vstupní body stejné včetně přenosu parametru tak je úplně jedno který souřadnicový zapisovač bude připojen jen se bude lišit velikost kresby.

A proč by měli mít posunut počátek obrazu o 93.75mm (MINIGRAF) nebo 75mm (XY41xx) v ose X a Y a ještě to bude závislé na datech pro kresbu. Řek bych, že tam bude chyba a pravděpodobně vznikla tím, že ten program před publikací vypadal jinak.

_________________
Ne všichni jsme měli z češtiny za jedna, aneb jsem dyslektik a dysgrafik.

http://www.sapi.cz/


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 21:27 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
Nojo, jenže když mi QORG(750,1050) nastaví souřadnice (0,0) doprostřed papíru, tak by mi bod (1200,1200) vyšel na (750+1200,1050+1200), a to se do 1500x2100 prostě nevejde.

Ale ten program nakreslil přesně to co měl, když nastavení toho počátku ignoruji a počítám od levého horního rohu. Takže to zatím neřeším a čmárám si po obrazovce :)

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 21:59 
Offline
Profík

Registrován: 15.01.2014, 20:08
Příspěvky: 783
Bydliště: Šlapanice
Has thanked: 129 times
Been thanked: 97 times
Pravě proto si myslím že tam bude chyba aneb to QORG(OX,OY) by mělo byt správně QORG(0,0).

_________________
Ne všichni jsme měli z češtiny za jedna, aneb jsem dyslektik a dysgrafik.

http://www.sapi.cz/


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 22:13 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3767
Has thanked: 269 times
Been thanked: 452 times
Tomu bych věřil, spousta programů na ukázku kresby z té doby je centrovaná nulou doprostřed papíru a mohlo to probublat. Jestli se navíc program chová tak že nula je v rohu, tak to bude chyba téměř určitě. Když jen pro návod Gamacentra vyšel opravný list na A4 s asi 15 vážnými chybami v tisku včetně několika chyb v ovladači ve strojáku co tam napsali, ten snad ani původně nemohl fungovat a šlo to do tisku...


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 22:20 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
Vypadá to tak. To by musel někdo otestovat v reálu, jak to přesně funguje.

Ale zatím další verze programu, už dává smysl i to nastavení rychlosti (teda aspoň v pomalém DOSBoxu), a takhle pokreslí celý papír:
Příloha:
1500x2100.png
1500x2100.png [ 20.92 KiB | Zobrazeno 8476 krát ]

Kód:
PROGRAM GRAFIK;
(*CAROVA GRAFIKA*)

uses Graph;



VAR karta,rezim:integer;
    penx,peny,penspeed:integer;



procedure qorg(x,y:integer);

          begin
          penx:=y;
          peny:=x
          end;



procedure qspeed(v:integer);

          begin
          if (v<0) or (v>5) then v:=5;
          penspeed:=30000;
          while v>0 do
                begin
                penspeed:=penspeed div 8;
                dec(v)
                end
          end;



procedure qmova(x,y:integer);

          begin
          penx:=x;
          peny:=y
          end;



procedure qvecta(x,y:integer);

          var t,w:integer;

          begin
          line(5+peny*3 div 10,465-penx*3 div 10,5+y*3 div 10,465-x*3 div 10);
          penx:=x;
          peny:=y;
          for t:=penspeed downto 0 do w:=getgraphmode
          end;



PROCEDURE MINI(X1,Y1,X2,Y2,X3,Y3:INTEGER);

          CONST   J = 50;      (*ROZLISITELNOST KRESBY*)
                  N = 50;      (*DELENI*)

          VAR I,X,Y : INTEGER;

          BEGIN
          QMOVA(X1,Y1);
          FOR I:=1 TO J DO
              BEGIN
              IF I MOD 2=1 THEN      (*KRESLENI JEDNIM TAHEM TAM*)
                 QVECTA(X1,Y1)
              ELSE
                 QVECTA(X3,Y3);
              X :=(X2-X1) DIV N+X1;
              Y :=(Y2-Y1) DIV N+Y1;
              X2:=(X3-X2) DIV N+X2;
              Y2:=(Y3-Y2) DIV N+Y2;
              QVECTA(X2,Y2);
              X3:=(X1-X3) DIV N+X3;
              Y3:=(Y1-Y3) DIV N+Y3;
              X1:=X;
              Y1:=Y;
              IF NOT(I MOD 2=1) THEN   (*KRESLENI JEDNIM TAHEM ZPET*)
                 QVECTA(X1,Y1)
              ELSE
                 QVECTA(X3,Y3)
              END
          END;



BEGIN
karta:=9;
rezim:=2;
initgraph(karta,rezim,' ');
floodfill(0,0,15);
setcolor(0);

qspeed(5);
qorg(   0,   0);
mini(   0,   0, 750,1050,   0,1050);
mini(   0,   0, 750,1050, 750,   0);
mini(1500,   0, 750,1050, 750,   0);
mini(1500,   0, 750,1050,1500,1050);
mini(1500,2100, 750,1050,1500,1050);
mini(1500,2100, 750,1050, 750,2100);
mini(   0,2100, 750,1050, 750,2100);
mini(   0,2100, 750,1050,   0,1050);

readln;
closegraph;
END.

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2020, 23:55 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1509
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 380 times
Kód:
Je nutné si uvědomit, že v G-Pascalu jsou při kreslení
na Minigrafu oproti BASICu (i standardních procedur Pascalu
pro ovládání Minigrafu z Pascalu, které jsou vypáleny
v pamětech Eprom a začínají všechny písmenem Q - viz.
odstavec 7) navzájem prohozeny osy x a y.


Kód:
skutečné souřadnice
 Pomocí těchto souřadnic zadáváme skutečné místo na
zobrazovacím médiu. Každému pixelu v nich odpovídá dvojice
celočíselných souřadnic.
 Souřadná soustava mající v levém dolním rohu bod
o souřadnicích (0,0). S těmito souřadnicemi se programátor
v G-PASCALu setká pouze u funkcí XPOS a YPOS a procedury
WINDOW.


Nahoru
 Profil  
 
PříspěvekNapsal: 17.05.2020, 00:47 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
Takže QORG je tam v podstatě k ničemu. Přidal jsem před spaním ještě rotační tvary:
Příloha:
kytka-vetrnik.png
kytka-vetrnik.png [ 12.2 KiB | Zobrazeno 8457 krát ]

Kód:
procedure kytka(xs,ys,r,v:integer);

          var a:real;
              i,x1,y1,x2,y2,x3,y3:integer;

          begin
          if v<2 then v:=2;

          for i:=0 to v do
              begin
              a:=6.2831853*i/v;
              x1:=xs+round(r*cos(a));
              y1:=ys+round(r*sin(a));
              a:=6.2831853*(i+0.5)/v;
              x2:=xs+round(r*cos(a));
              y2:=ys+round(r*sin(a));
              a:=6.2831853*(i+1)/v;
              x3:=xs+round(r*cos(a));
              y3:=ys+round(r*sin(a));

              mini(x2,y2,xs,ys,x1,y1);
              mini(x2,y2,xs,ys,x3,y3)
              end
          end;



procedure vetrnik(xs,ys,r,v:integer);

          var a:real;
              i,x1,y1,x2,y2:integer;

          begin
          if v<3 then v:=3;

          for i:=0 to v do
              begin
              a:=6.2831853*i/v;
              x1:=xs+round(r*cos(a));
              y1:=ys+round(r*sin(a));
              a:=6.2831853*(i+1)/v;
              x2:=xs+round(r*cos(a));
              y2:=ys+round(r*sin(a));

              mini(x2,y2,xs,ys,x1,y1)
              end
          end;

Parametry při volání jsou souřadnice středu, poloměr, počet vrcholů, a v proceduře MINI zmenšená konstanta N na 20, takže se kreslí s menší hustotou čar:
Kód:
kytka(1000,1500,450,7);
vetrnik(500,600,450,7);

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
PříspěvekNapsal: 17.05.2020, 08:06 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
Větrníky se můžou točit vlevo nebo vpravo:
Příloha:
vetrniky.png
vetrniky.png [ 5.3 KiB | Zobrazeno 8434 krát ]

Kód:
procedure vetrnik(xs,ys,r,v,s:integer);

          var a:real;
              i,x1,y1,x2,y2:integer;

          begin
          if v<3 then v:=3;

          for i:=0 to v do
              begin
              a:=6.2831853*i/v;
              x1:=xs+round(r*cos(a));
              y1:=ys+round(r*sin(a));
              a:=6.2831853*(i+1)/v;
              x2:=xs+round(r*cos(a));
              y2:=ys+round(r*sin(a));

              if 0=(s mod 2) then
                 mini(x1,y1,xs,ys,x2,y2)
              else
                 mini(x2,y2,xs,ys,x1,y1)
              end
          end;

Podle sudého nebo lichého čísla v posledním parametru:
Kód:
vetrnik(1000,1500,450,4,0);
vetrnik( 500, 600,450,4,1);

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 100 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 6 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz