Moznik po DIN 6887
Idelal: Pustavrh Peter
Naloga: Moznik po DIN 6887
Mentor: Janez Vrhovec, dipl.ing.
Predmet: Osnove in postopki konstruiranje
Kazalo
Abstract
1.0. Uvod
2.0.Predstavitev programa
3.0.Uporaba knjiznice PHIGS
4.0.Zakljucek
5.0.Literatura
Abstract
MAIN PURPOSE OFF THE PROGRAM
Main purpose of the task is to write a program, that allows us reading
of information about treenail and copy treenail and treenail connection
to the screen. There has been also required rotation and translation in
2D, scaling a treenail. Program should be adaptable to some similar problems.
TRANSLATING PROGRAM
Numerical part off the program is made with program language FORTRAN
77. Numerical parts off the program has been directly translated from the
FORTRAN 77. Possible errors has been corrected at this stage off the job.
In the graphical part off the program are included enlistment off characters
from the PHIGS library. For translation off the graphical part has been
used translator G77.
USING A PROGRAM
When the program has starts up, we have been asked for the diameter
of the shaft. In the aspect off that, the treenail has been printed to
the screen. Dimensions off the treenail are determined in the initial file.
If there are required some extra operations with the picture, we have to
close the primary window with the combination of f the keys ALT-TAB. We
can continue working by typing GO and enter. We got some different possibilities,
such as: scaling, rotating around z-axis, translating in x and y axis,
printing a treenail or treenail connection to the screen, back to the start
and exit from the program.
Scaling
We can scale an object by typing an scale factor. We can also decrease
an object by typing an inverse value off scale factor, that means, one
fractionated by decreasing value.
Translation in x and y axis
We can translate an object by typing a movement in x and y axis (cartesian
coordinate system), or just typing a radius and angle off translation (polar
coordinate system).
Rotation around z-ax
We can rotate an object by typing an angle off rotation. Angle must
be determined in degrees.
IMPORTING A PICTURE TO A DIFFERENT PROGRAMS
Picture can imported to other graphical programs, such as PAINT-BRUSH,
with the clipboard wiever and re-edited in the PAINT-BRUSH.
1.0.Uvod
Namen naloge, ki sem jo dobil zq oprviti je napisati program, ki omogoca
branje podatkov o mozniku iz datoteke in izris moznika in moznicne zveze
na ekran. Pri tem je podana zahteva za translacijo, rotacijo in skaliranje
moznika v 2D ravnini.Numericni del programa je izdelan v programskem jeziku
FORTRAN verzija 77. Graficni del pa vsebuje nabor ukazov PHIGS knjiznice.
Pri zagonu programa te program uprasa po premeru gredi. Ko mu vneses
premer gredi program prebere premer in iz datoteke izbere primerno velik
moznik za podano gred.
V nadaljevanju programa program najprej izrise moznik in koordinatni
sistem.Ce zelimo izris zveze zapremo okno z risbo in nadaljujemo program
z ukazom GO. Odpre se izbirna stran na kateri izberem zeljeno operacijo.
Naloga Predmet prikaza je moznik in z moznicno gredno vezjo nanjo vezan
obroc. Moznik je klinaste oblike z nosom po standardu DIN 6887. Program
naj izrise moznik glede na interaktivno podane mere moznika in detajl gredne
vezi.
Slika moznicne zveze:
Slika moznika:
2.0.Predstavitev programa
Vhodna datoteka
V vhodni datoteki je zapisano pet razlicno velikih moznikov. Moznik se izbere glede na zacetni izbor premera gredi. Premer gredi ki ga izbiramo mora biti v intervalu od 30mm do 75mm. Ta omejitev pa je zato ker sem v vhodno datoteko zapisal moznike, ki ustrezajo premerom gredi.
Primer
if(D.GE.30.AND.D.LT.38)then ! S tem stavkom izbiram moznik
glede na premer gredi.
! Ce je premer gredi ustrezen se odpre datoteka podatki1
! v kateri so zapisane mere za moznik.
open (1,file='podatki1.dat')
! Stavek odpre datoteko s podatki o mozniku.
read (1,*)ime
read (1,*)n
read (1,*)b
read (1,*)L
! Stavki read preberejo iz datoteke parametre o mozniku.
read (1,*)h2
read (1,*)h
read (1,*)r1
read (1,*)t1
close (1)
! Ukaz close zapre datoteko.
Izracun oglisc, ki popisujejo moznik.
Oglisce sem popisal tako, da sem postavil koordinatni sistem in glede na koordinatno izhodisce izracunal x in y koordinato. Oglisca sem popisal tako, da se izracunajo glede na vhodne podatke in premera gredi.
Primer
OG(1,1)=0
! Popisuje prvo oglisce po x koordinati
OG(1,2)=0
! Popisuje prvo oglisce po y koordinati
OG(2,1)=b+L
! Popisuje drugo oglisce po x koordinati
OG(2,2)=0
! Popisuje drugo oglisce po y koordinati
OG(3,1)=b+L
! Popisuje tretje oglisce po x koordinati
OG(3,2)=h1-L/100
! Popisuje tretje oglisce po y koordinati
OG(4,1)=b
! Popisuje cetrto oglisce po x koordinati
OG(4,2)=h1
! Popisuje cetrto oglisce po y koordinati
OG(5,1)=b
! Popisuje peto oglisce po x koordinati
OG(5,2)=h2
! Popisuje peto oglisce po y koordinati
OG(6,1)=(H2-h)*tan(1.047198)
! Popisuje sesto oglisce po x koordinati
OG(6,2)=h2
! Popisuje sesto oglisce po y koordinati
OG(7,1)=0
! Popisuje sedmo oglisce po x koordinati
OG(7,2)=h
! Popisuje sedmo oglisce po y koordinati
OG(8,1)=r1
! Popisuje osmo oglisce po x koordinati
OG(8,2)=0
! Popisuje osmo oglisce po y koordinati
OG(9,1)=r1
! Popisuje deveto oglisce po x koordinati
OG(9,2)=h-cos(1.047198)*r1
! Popisuje deveto oglisce po y koordinati
OG(10,1)=(H2-h)*tan(1.047198)+r1/tan(1.308996939)
! Popisuje deseto oglisce po x koordinati
OG(10,2)=h2-r1
! Popisuje deseto oglisce po y koordinati
OG(11,1)=b
! Popisuje enajsto oglisce po x koordinati
OG(11,2)=h2-r1
! Popisuje enajsto oglisce po y koordinati
Za izracun ostalih oglisc, ki popisujejo celotno zvezo sem izracunal
na enk nacin kot je prikazano v izracunu oglisc, ki popisujejo moznik.
Oznacitev stranic, ki povezujejo oglisca.
Zapisati je potrebno stevilke oglisc na zacetku in koncu posamezne stranice. Stevilke ogljisc sem zapisal v dvodimenzisko polje (ST(i,1) in ST(i,2)).
Primer
do i=1,6
!do zanka steje prvih sest oglisc
ST(i,1)=i ! grupiranje
prvih oglisc stranic v polja
ST(i,2)=i+1 ! grupiranje drugih oglisc stranic
v polja
enddo
ST(7,1)=7
! grupiranje prvega oglisca sedme stranice v polje
ST(7,2)=1
! grupiranje drugega oglisca sedme stranice v polje
Popis koordinatnega sistema
do i=1,4
! Stevilo tock potrebnih za popis koordinatnega sistema
do j=1,3
KS(i,j)=0
enddo
enddo
KS(2,1)=4.5*d !vrednost,ki
jo zavzame posamezna točka koo. sistema
KS(3,2)=1.5*d !vrednost,ki
jo zavzame posamezna točka koo. sistema
Izbirna stran
Na tej strani izberem kaj naj mi program izvede. Izbiram lahko med skaliranjem, trnslacijo, rotacijo, izrisom moznicne zveze, izrisom moznika, vrnitev na zacetek programa in izhodom iz programa.
Moznosti
write(*,*)'1
(skaliranje)'
write(*,*)'2 (translacija)'
write(*,*)'3 (rotacija okoli Z osi)'
write(*,*)'4 (izris moznicne zveze)'
write(*,*)'5 (izris moznika)'
read(*,*)operacija
Ko izberemo stevilko, ki doloca posamezno operacijo s pomocjo IF stavka poklicemo podprogram, ki nam to operacijo izvede. Ko je operacija zakljucena se program vrne na izbirno stran.
Primer if stavka, ki poklice skalirno matriko in izvede skaliranje
if (operacija.eq.1)then
! izvede skaliranje
call skalirna(M)
! klice skalirno matriko
goto65
Kreiranje transformacijskih matrik
Potem ko izberem doloceno transformacijo pridem v del programa za kreiranje
transformacijskih matrik.
Transformacijske matrike se uporabljajo za izracun trnsfomiranih tock
ogljisc, zato morajo biti oblikovane tako, da se enostavno zmnozijo koordinate
posamezne tocke z doloceno matriko in dobimo novo tocko.Obliko posameznih
matrik bom predstavil pri vsaki kreaciji matrike posebej.
do
i=1,3
! Pred vsako kreacijo pa moramo postaviti
do j=1,3
! vrednost matrike M(i,j)=0
M(i,j)=0
Kreiranje skalirne matrike
Sx 0 0
Skalirna matrika mora imeti tako obliko S= 0 Sy 0
0 0 1
Faktorji matrike so: Sx in Sy
Sx...faktor skaliranja v x smeri
Sy...faktor skaliranja v y smeri
Te faktorje glede na svojo izbiro poda uporabnik programa. Zato je bilo potrebno program napisati tako, da ko se uporabnik odloci za skaliranje na zaslon napise navodilo za podajanje faktorjev.
Za ta postopek napisem:
write(*,*)'UPORABNIK NAJ VNESE FAKTORJE SKALIRANJA V SMERI X,Y'
Ko so le ti faktorji podani jih mora program prebrati z zaslona in kreirati skalirno matriko. Ker je matrika ze pred vsako transformacijo postavljena na M(i,j)=0 napisem samo faktorje skaliranja v matriko.
read(*,*)sXi,sYi
! program bere faktorje skaliranja
Mr(1,1)=sXi
! kreira se nava matrika
Mr(2,2)=sYi
Mr(3,3)=1
Izracun transformiranih tock
Izvesti je potrebno mnozenje
matrike M(3,3) s vektorjem.V ektor dobim tako,da vaktor
prevzame vrednost posameznega
oglisca. Zadnje polje prevzame vrednost 1.
do i=1,n
! Steje vsa oglisca
do j=1,2
vek(j)=OG(i,j)
!vektor privzame vrednosti posameznega oglisca
enddo
vek(3)=1
! zadnje polje zavzame vrednost 1
call vzm(zmn,M,vek)
! klice podprogram za mnozenje vektorja z matriko
do j=1,2
OG(i,j)=zmn(j)
! oglisce privzame vrednosti produkta vektorja in matrike
enddo
enddo
Ker je del programa za izracun
postavljen pred izbirno stran se po izracunu novih oglidc na
ekran pokaze zopet izbirna
stran. Ko uporabnik izbere drugo transformacijo se ce postopek
ponovi.
Edina sprememba je v obliki
transformacijske matrike in vhodnih podatkov, ki jih mora
uporabnik vnesti v program.
Kreiranje translacijske matrike
1 0 0
Translacijska matrika mora imeti tako obliko: T= 0 1 0
x y 0
Faktorji matrike so: Tx in Ty.
Tx...faktor translacije v x smeri
Ty...faktor translacije v y smeri
Pri izvedbi traslacije modela mora uporabnik vnesti podatke o spremembi lege le tega glede na predhodni polozaj.
Transformacija moznika:
Kreiranje rotacijske (z-os) matrike
C S 0
Matrika mora biti take oblike: Rz= -S C 0
0 0 1
Pomen C in S vmatriki: C=cos(fi) , S=sin(fi)
Pri izvedbi rotacije modela okoli osi z mora uporabnik vnesti podatke
o kotu za katerega zeli zasukati model.
Rotacija moznika okoli z-osi:
3.0.Uporaba knjiznice PHIGS
Za uporabo teknjiznice je potrebno uporabljati ukaze, ki jih predpisuje
standard PHIGS.
Najprej je potrebno odpreti knjiznico, sledijo nastavitve in
nazadnje se podajo parametri in
ukazi za izris modela in koordinatnega sistema, ter parametri
in ukazi za izpis teksta, ki ga
zelimo imeti na zaslonu ob izrisu modela.
call popph(1,0) ! Odpre se knjiznica
1... stevilka datoteke,ki
jo PHIGS uporabi za izris napak
0... velikost vmesnegs spomina
call popwk(1,"",WK15800) ! Poveze se s podano izhodno enoto
1... stevilka izhodne enote
"...predstavlja povezavo
WK15800...tip izhodne enote
Izracuna matriko za preslikavo med risalnimi prostori
call pevmm(WindowLimits, ViewportLimits, ErrorReturn, ViewMappingMatrix)
WindowLimits ...definicija velikosti
okna risanja
ViewportLimits ...definicija velikosti
pogleda
ErrorReturn ...indikator napak
ViewMappingMatrix ...matrika za preslikavo
call pswkw(1,0.1,0.9,0.1,0.9) !nastavitev uporabniskih koordinat
1...stevilka
izhodne enote
0.1...spodnja meja-vodoravno
0.9...zgornja meja-vodoravno
0.1...spodnja meja-navpicno
0.9...zgornja meja-navpicno
call pswkv(1,0.0,0.1,0.0,0.1) !nastavitev zaslonskih koordinat
1...stevilka
izhodne enote
0.0...spodnja
meja-vodoravno
0.1...zgornja
meja-vodoravno
0.0...spodnja
meja-navpicno
0.1...zgornja
meja-navpicno
call psplci(4) ! nastavitev barve crt
barvni indeksi:
1=bela,2=rdeca,3=rumena
4=zelena,5=sv.modra,6=modra,7=viola,8=crna
Izpis teksta izpise X in Y ob koordinatnem sistemu
call pstxci(6)
! izbrana barva glede na zgornji indeks
call pschh(0.0045)
! visina teksta
call pstxal(PACENT,0)
! poravnava
call ptx(KS(3,1),KS(3,2),
'y') ! izpis teksta
call ptx(KS(2,1),KS(2,2),
'x')
Izris stranic na zaslon
Ukaz ppl lahko rise le posamezno polje in je
potrebno vsako daljico narisati posebej, to
omogoca naslednja DO-zanka s tem, da se za
vsako daljico posebej vnese koordinate oglisc v
poje kx in polje ky.
do r=1,n
! stevilo vseh stranic
kx(1)=OG(ST(r,1),1)
! x koordinata prvega oglisca stranisc r
ky(1)=OG(ST(r,1),2)
! y koordinata drugega oglisca stranice r
kx(2)=OG(ST(r,2),1)
! x koordinata drugega oglisca stranice r
ky(2)=OG(ST(r,2),2)
! y koordinata drugega oglisca stranice r
call ppl(2,kx,ky) ! klicem izris
crt
enddo
4.0.Zakljucek
Izdelava programa je bila precej zahtevna , saj je zahtevala precejsno
poznavanje porogramskega jezika FORTRAN.
Ob izdelavi sem se seznanil z uporabo knjiznice PHIGS.
V nalogi sem spoznal osnove porogramiranjain se seznanil z programskim
jezikom fortran.
Pisanje programov nam omogoca lazje nadaljevanje dela. Saj nam programi
opravijo razlicne izracune posameznih
delov in izris na ekran.
5.0.Literatura
-standard DIN 6887
-Fortran Zoze Petrisic
-Computer Grafics John Lansdown
-Phigs knjiznica