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
 
 
 

Download

This package is available via HTTP