 PARAGLIDER DESIGN HANDBOOK
CHAPTER 5. PANEL FLAT DEVELOPMENT

5.1 Introduction
5.2 Description of the LE method
5.4 The FORTRAN subroutine

5.1 Introduction

This chapter describes the mathematical method for the flat development of the upper and lower panels of the cells.

Other designers use 3D modeling programs such as Rhino, 3dStudiomax ... but Laboratori d'envol algorithm has developed a small algorithm, very simple and giving the same, taken the airfoils in 3D directly from the CAD program.

5.2 Description of the LE method

1. The starting point is the 3D digital model of the paraglider with the airfoils in their relative position as planned.

2. We take two consecutive airfoils, which we call airfoil L (left) and airfoil R (right).

3. Each airfoil is divided into two curves (two 3D CAD polylines), corresponding to the upper surface (between LE and TE) and the corresponding to the lower surface (between LE and TE). Inlets are not part of these curves. Fig 1: Upper and lower polylines of the airfoil

4. Take the upper left and upper right polylines, each of which is composed of N points, where N is large enough. Are the points from the initial definition of the airfoil. Running the CAD command "_list " on the polyline we obtained the coordinates x, y, z of the N points, that we copy to a text file, to be further processed by a subroutine.

5. The basic idea is to take 2 consecutive points on the left L1, L2 and right R1, R2 to form a quadrilateral. Then we divide the quadrilateral (for one of its diagonal) into two triangles. We can calculate the sides of the triangles, because we know the coordinates of points. Then it is only required to develop the non planar quadrilater in a plane, placing the two triangles on a plane, articulated by the quadrilater diagonal. The error committed in the process is small, because the points are close and quadrilaterals are almost flat. Fig. 2:  Two consecutive airfoils and reference points.

6. Repeat above process with the following points: L2 and L3, R2 and R3, and so on until the whole surface. The result is a flat surface developed from triangles with overlapping sides. Fig. 3: Flat development

7. Repeat the process (4) with the L and R polylines of the lower surface.

8. Repeat the process (2) with all consecutive airfoils of the half wing.

5.3 Analytical geometry principle

This section describes the mathematical point (5) of the method outlined up. Data:

L1, L2 Points of the left airfoil polyline
R1, R2 Points of the right airfoil polyline
a,b,c,d,e,f  distances between points

Unknowns:

hR= heigth of triangle L1-R1-R2
hL= heigth of triangle L1-R1-L2
a1R, a2R
a1L, a2L

Basic relations:

    hR2+a1R2 = b2
    hR2+a2R2 = c2
    a1R + a2R = a

operand -:

    a1R2 - a2R2 = b2 - c2

replacing  in the previous ( a1R = a - a2R ) we obtain a2R :

    a2R = ( a2 -b2 + c2 ) / ( 2*a )   and
    a1R = a - a2R     and from 
    hR = sqrt ( c2 - a2R2 )

and likewise for the other triangle:

     a2L = ( a2 -e2 + d2 ) / ( 2*a )   and
     a1L = a - a2L     and from 
   hL = sqrt ( d2 - a2L2 )

Finally we have the flat coordinates of L1,L2,R1,R2 against an axes system orthogonal to L1-R1:

L1=(0,0)
R1=(a,0)
L2=(a1L,hL)
R2=(a1R,hR)

In the most general case, in an XY Cartesian coordinate system with the R1 at (x0, y0) and the segment L1-R1 inclined θ degrees inclined to the X-axis: L1x L1y
=
 X0 Y0

 R1x R1y
=
 cos θ - sin θ sin θ cos θ
 a 0
+
 X0 Y0

 L2x L2y
=
 cos θ - sin θ sin θ cos θ
 a1L hL
+
 X0 Y0

 R2x R2y
=
 cos θ - sin θ sin θ cos θ
 a1R hR
+
 X0 Y0

Subsequent calculations are carried out with the rest of points 2-3, 3-4, 4-5, .... N-1-N taking in each step the following substitutions:

X0    <-------   L2x
Y0    <-------   L2y
tan θ = ( R2y -  L2y ) / ( R2x  - L2x ) Fig. 5: Substitution and iteration

5.4 The FORTRAN subroutine

Reads the example files p1.txt and p2.txt (panel 7-8 upper from gnuLAB-1), and writes panell.dxf output.

c***************************************************************
c      PHC PARAGLIDING. PANEL SUBROUTINE.
c      Pere Hernàndez i Casellas
c      Laboratori d'envol
c      pere AT laboratoridenvol DOT com
c      Version 0.1 experimental 2005-02-13
c      Version 0.2 2006-09-01
c      Version 0.3 2009-01-10
c      FORTRAN g77 (GNU/Linux)
c***************************************************************

program panell

integer linecolor

real rx(0:300),ry(0:300),rz(0:300)
real sx(0:300),sy(0:300),sz(0:300)

real x0,y0,theta

real a,b,c,d,e,f

real hr,a1r,a2r,hl,a1l,a2l

real r1x(0:300),r1y(0:300),l1x(0:300),l1y(0:300)
real r2x(0:300),r2y(0:300),l2x(0:300),l2y(0:300)

area=0.

open(unit=20,file='panel.dxf')
open(unit=22,file='p1.txt')
open(unit=23,file='p2.txt')

rewind(22)
rewind(23)

pi=4.*atan(1.)

c   Read the left and right coordinates

write (*,*) npunts

do i=1,npunts

rx(i)=x1
ry(i)=y1
rz(i)=z1
sx(i)=x2
sy(i)=y2
sz(i)=z2

write (*,*) rx(i),ry(i),rz(i)
write (*,*) sx(i),sy(i),sz(i)

end do

x0=0.
y0=0.
theta=0.

do i=1,npunts-1

c   Compute the basic lengths of the triangles

a=sqrt((rx(i)-sx(i))*(rx(i)-sx(i))+(ry(i)-sy(i))*(ry(i)-sy(i))+(rz(i)-sz(i))*(rz(i)-sz(i)))
b=sqrt((rx(i)-sx(i+1))*(rx(i)-sx(i+1))+(ry(i)-sy(i+1))*(ry(i)-sy(i+1))+(rz(i)-sz(i+1))*(rz(i)-sz(i+1)))
c=sqrt((sx(i)-sx(i+1))*(sx(i)-sx(i+1))+(sy(i)-sy(i+1))*(sy(i)-sy(i+1))+(sz(i)-sz(i+1))*(sz(i)-sz(i+1)))
d=sqrt((rx(i+1)-sx(i))*(rx(i+1)-sx(i))+(ry(i+1)-sy(i))*(ry(i+1)-sy(i))+(rz(i+1)-sz(i))*(rz(i+1)-sz(i)))
e=sqrt((rx(i)-rx(i+1))*(rx(i)-rx(i+1))+(ry(i)-ry(i+1))*(ry(i)-ry(i+1))+(rz(i)-rz(i+1))*(rz(i)-rz(i+1)))
f=sqrt((rx(i+1)-sx(i+1))*(rx(i+1)-sx(i+1))+(ry(i+1)-sy(i+1))*(ry(i+1)-sy(i+1))+(rz(i+1)-sz(i+1))*(rz(i+1)-sz(i+1)))

write (*,*) a,f

a2r=(a*a-b*b+c*c)/(2.*a)
a1r=a-a2r
hr=sqrt(c*c-a2r*a2r)

a2l=(a*a-e*e+d*d)/(2.*a)
a1l=a-a2l
hl=sqrt(d*d-a2l*a2l)

write(*,*) "a1,a2,a,a1+a2r", a1r,a2r,a,a1r+a2r
write(*,*) "a1,a2,a,a1+a2l", a1l,a2l,a,a1l+a2l

l1x(i)=x0
l1y(i)=y0

r1x(i)=a*cos(theta)+x0
r1y(i)=a*sin(theta)+y0

l2x(i)=a1l*cos(theta)-hl*sin(theta)+x0
l2y(i)=a1l*sin(theta)+hl*cos(theta)+y0

r2x(i)=a1r*cos(theta)-hr*sin(theta)+x0
r2y(i)=a1r*sin(theta)+hr*cos(theta)+y0

x0=l2x(i)
y0=l2y(i)
theta=atan((r2y(i)-l2y(i))/(r2x(i)-l2x(i)))

write(*,*) "a1r,a2r,hr", a1r,a2r,hr
write(*,*) "a1l,a2l,hl", a1l,a2l,hl

write(*,*) x0,y0,theta

end do

do i=1,npunts-1

write(*,*) l1x(i),l1y(i),l2x(i),l2y(i)

call line(l1x(i),-l1y(i),r1x(i),-r1y(i),6)
call line(l1x(i),-l1y(i),r2x(i),-r2y(i),5)
call line(l1x(i),-l1y(i),l2x(i),-l2y(i),4)
call line(r1x(i),-r1y(i),r2x(i),-r2y(i),3)
call line(r1x(i),-r1y(i),l2x(i),-l2y(i),2)
call line(l2x(i),-l2y(i),r2x(i),-r2y(i),3)

end do

c   Close the output .dxf file

write(20,'(A,/,I1,/,A)') "ENDSEC",0,"EOF"

c   Close units

close (20)
close (22)
close (23)

end

SUBROUTINE line(p1x,p1y,p2x,p2y,linecolor)
c   line P1-P2
integer linecolor
write(20,'(A,/,I1,/,A)') "LINE",8,"default"
write(20,'(I1,/,A)') 6,"CONTINUOUS"
write(20,'(I2,/,F9.4,/,I2,/,F9.4)') 10,p1x,20,-p1y
write(20,'(I2,/,F9.4,/,I2,/,F9.4)') 11,p2x,21,-p2y
write(20,'(I2,/,I2,/,I2,/,I2,/,I2)') 39,0,62,linecolor,0

return
end