PDA

View Full Version : aiuto con programma in fortran


pincopall
03-05-2006, 15:40
questo è quello che mi è stato inviato poco fa dato che stavo impazzendo a fare un cambio di sistema. Questo codice "dovrebbe" consentire di cambiare sistema di riferimento solamente dando le coordinate di 3 punti.
Questo è quello che mi è stato scritto:

Nella subroutine ci sono due funzioni che devi utilizzare:
la prima si chiama "rotcal" ed è relativa al calcolo della
matrice di
rotazione per il passaggio al PAN. R1 e r2 corrispondono ad A1
(preauricolare sinistro) e A2 (preauricolare destro), rispettivamente.
R3 è il Nasion.
la seconda si chiama "local" ed è relativa
all'applicazione della suddetta
matrice di rotazione


c-----------------------------------------------/ rotcal
c
c calculates rotation matrix for local coordinate system
c
subroutine RotCal (r1, r2, r3, A, iS)
c
c where r1,r2,r3 = points which define plane to use
c as base for local coordinate system.
c r2 is the origin.
c Y = (r1-r2)
c X = normal to plane r1,r2,r3
c Y = line perpendicular to Z in plane
r1,r2,r3
c
c A = rotation matrix returned
c iS = -1 => left handed system
c = 1 => right handed system
c


c
DIMENSION r1 (3), r2 (3), r3 (3)
DIMENSION vI (3), vJ (3), vK (3)
DIMENSION A (3,3)
c
s = 0
do iC= 1, 3
A (iC,2) = r1 (iC) - r2 (iC)
s = s + (A (iC,2)**2)
end do
s = sqrt (s)
c
do iC = 1, 3
A (iC,2) = A (iC,2) / s
end do
c
DX2 = r2(1)-r1(1)
DX3 = r3(1)-r1(1)
DY2 = r2(2)-r1(2)
DY3 = r3(2)-r1(2)
DZ2 = r2(3)-r1(3)
DZ3 = r3(3)-r1(3)
r = -(DY2*DZ3-DZ2*DY3) * iS
s = -(DZ2*DX3-DX2*DZ3) * iS
t = -(DX2*DY3-DY2*DX3) * iS
sU = sqrt (r*r + s*s + t*t)
A (1,3) = r / sU
A (2,3) = s / sU
A (3,3) = t / sU
c
do iC = 1, 3
vI (iC) = A (iC,3)
vK (iC) = A (iC,2)
end do
c
call PV (vK, vI, vJ)
c
do iC = 1, 3
A (iC,1) = vJ (iC)
end do
c
return
end
c
c
c------------------------------------------------/ local
c
c calculates coordinates of point in local coordinates
c
subroutine Local (A, r2, rGlo, rLoc)
c
c where A = rotation matrix (calculated by RotCal)
c r2 = origin of local coordinates
c rGlo = point in global coordinates
c rLoc = returned position in local coordinates
c
DIMENSION A (3,3)
DIMENSION r2 (3), rGlo (3), rLoc (3)
DIMENSION D (3)
c
do i = 1, 3
D (i) = rGlo (i) - r2 (i)
end do
c
do i = 1, 3
rLoc (i) = 0.
do j = 1, 3
rLoc(i) = rLoc (i) + (A (j,i) * D (j))
end do
end do
c
return
end



Ora io non avevo nemmeno sentito mai prima di questo linguaggio...come funziona? è come il c che si deve compilare? qualcuno mi può spiegare come fare ad utiliazzare il programma? non mi interessa comprenderlo ma usarlo :)
spero che qualcuno sappia aiutarmi!

wolan
15-05-2006, 17:23
ti serve un compilatore fortran, se usi linux c'è tipo l'ifort della intel che per scopi non commerciali è gratuita, compili il tuo programma ad esempio prova.f con "ifort -o prova.exe prova.f" quindi lanci l'eseguibile "./prova.exe"