RPK - SEMINAR – VRTENINA

(naloga št.: 4.29)

  1. Definicija naloge
  2. Izdelati je potrebno program, ki bo prebral vhodno datoteko s podatki o vhodni krivulji, osi in kotu vrtenja in številu kroznih delitev ter iz tega izracunal vrtenino, ki jo mora prikazati v poljubni orientaciji ter zapisati v DXF datoteko.

  3. Abstact
  4. This page is a description of a short program which generate a revolved surface according to incoming data. This data are: curve which 'll be rotated (defined by lines), number of points, number of distributions, angle of rotation and axis of rotation (defined by two points). Program "seminar.exe" runs on Windows 95. It reads data in file "krivulja.txt" and generates the revolved surface, which is shown on display. By pressing key "s" it also records it in file "vrtenina.dxf". File "krivulja.txt" can be changed with text editor or generated with special program "krivulja.exe". 3D figure on display can be rotated with arrow keys, enlarged with key "a" and reduced with "q".

  5. Opis rešitve

Program je napisan v programskem jeziku C, grafika pa je izvedena s pomocjo kompatibilnih knjiznic OpenGL (Silicon Graphics). Program deluje na sistemu Windows 95. Podatki potrebni za izracun se nahajajo v tekstovni datoteki "krivulja.txt" iz katere jih program "seminar.exe" prebere. Os vrtenja in krivulja se podata v ravnini XY. Vhodna krivulj je podana s tockami, ki jih povezujejo ravne crte, os vrtenja pa z dvema skrajnima tockama, ki lezita na njej. Generiranje vrtenine je izvedeno tako, da se os vrtenja najprej premakne na "y" os in nato izracuna tocke vrtenine. Izris, rotacija in pribljizevaje slike, je izvedeno s pomocjo OpenGL knjiznic. Program zapiše geometrijo vrtenine v datoteko "vrtenina.dxf".

 

Datoteka s podatki

V datoteki "krivulja.txt" so zapisani podatki o osi in kotu vrtenja, številu kroznih delitev, številu tock, ki popisujejo krivuljo in koordinate teh tock v ravnini (X, Y). Podatki so podani na naslednji nacin:

DATOTEKA

-10.000000 -10.000000

40.000000 40.000000

360.000000

30

10

0.000000 -10.000000

10.000000 -10.000000

20.000000 -5.000000

30.000000 0.000000

40.000000 10.000000

45.000000 20.000000

45.000000 30.000000

50.000000 35.000000

55.000000 35.000000

65.000000 30.000000

OPIS PARAMETROV

... prva tocka osi vrtenja "a" (X Y)

... druga tocka osi vrtenja "b" (X Y)

... kot zavrtitve vrtenine [° ]

... število delitev po obodu

... število tock, ki podajajo krivuljo

... 1.tocka, ki podajaja krivuljo (X Y)...

 

 

 

 

 

 

 

 

... 10. tocka, ki podajaja krivuljo (X Y)

Datoteko se lahko popravlja v urejevalniku besedil, zaradi njene nejasnosti za urejanje pa je narejen tudi poseben program "krivulja.exe" (C-koda: "krivulja.cpp"). Ta po zagonu sprašuje uporabnika po zahtevanih parametrih in jih zapiše v datoteko "krivulja.txt". Koordinate tock in kot zavrtitve so decimalna števila, število delitev in število tock krivulje pa sta celoštevilcni vrednosti. Koordinate tock se podaja s presledkom (X_Y).

Izracun tock vrtenine

Za potrebe zapisa krivulje oziroma vrtenine je bil strukturiran tip spremenljivke "Tocka", ki vsebuje tri koordinate tocke (X,Y,Z). Vrtenina je zapisana v dvodimenzionalno polje tega tipa. Prvi parameter tece v vzdolzni (parameter "i"), drugi pa v obodni (parameter "j") smeri vrtenine. Vhodna krivulja, ki se prebere iz "krivulja.txt" se zapiše v prvo vrstico tega polja (vzdolzno).

Ker je vrtenina kreirana okoli "y" osi je treba tocke krivulje transformirati tako, kot bi bila os vrtenine na "y" osi. Najprej naredimo translacijo tako, da tockam krivulje odštejemo eno od tock (a), ki dolocajo os vrtenja:

Krivuljo je treba nagniti za toliko kolikor je bila nagnjena os rotacije. Kot se izracuna:

Rotacija krivulje na XY ravnini:

Iz krivulje naredimo vrtenino, tako da vsako tocko krivulje vrtimo okoli "y" osi:

j - Kot zavrtitve vrtenine

D - Število delitev po obodu

n – Število tock, ki popisujejo krivuljo.

Izdelano vrtenino je treba transformirati nazaj na dejansko os rotacije, za kar rabimo spet rotacijo in translacijo v ravnini:

Rotacija:

Translacija:

"Z" koordinate tock se pri tem ne spreminjajo, saj gre za ravninsko transformacijo. Vrtenina je sedaj postavljena na pravo mesto v prostoru.

Zapis v DXF datoteko

DXF (Data eXchange File) je standarden format (razvit v firmi Autodesk) za vektorski prenos 3D slik med razlicnimi programskimi paketi. Sestavljen je iz razlicnih sekcij, ki definirajo podatke o modelu. Za primer zapisa vrtenine zadostuje enostaven popis entitet, ki jih predstavlajo posamezne crte definirane med dvema tockama v prostoru. Spodaj je napisan primer datoteke, ki zapiše crto med tockama A in B na risalni ravnini št. 8. Vrednosti odnacene z xA, yA, zA, xB, itd so realna števila, koordinate tock:

0

SECTION

2

ENTITIES

0

LINE

8

0

10

xA

20

yA

30

zA

11

xB

21

yB

31

zB

0

ENDSEC

0

EOF

Vrtenina je popisana kot mrezni model s crtami (LINE) na zgoraj opisani nacin. Crte mreze se zapisujejo z dvema dvojnima zankama, ki teceta po vseh tockah, najprej po vzdolzni in nato še tiste v obodni smeri vrtenine, s posebno funkcijo. Natancna izvedba je razvidna iz izvorne kode. S pritiskom na tipko "s" se kreira datoteka "vrtenina.dxf" v katero se zapiše geometrija plašca vrtenine. Pravilnost zapisa datoteke je bila preverjena z njenim uvozom v programski paket AutoCAD 14.

  1. Opis programa

Program se pozene z ukazom "seminar.exe", pri tem se generira graficno okno. V tem oknu je z debelejšimi rdecimi crtami izrisana vrtenina razvita iz vhodne krivulje prikazani z rumeno barvo. Tri bele crte predstavljajo koordinatne osi. Os vrtenine je narisana z zeleno "crta – pika" linijo. Pri delu s programom se uporabljajo naslednji ukazi:

Da bi program deloval pravilno naj bo CapsLock IZKLJUCEN!

Program je napisan v programskem jeziku C, njegova izvorna koda: "seminar.cpp". Maksimalno število tock vhodne krivulje, ki jih program sprejme je 30, število kroznih delitev pa 300. Te vrednost je mozno povecati z povecanjem definiranega polja za zapis tock.

Cerkno, 29.6.1998

OBID Martin