$SPAD/src/input bouquet.input

The Axiom Team December 3, 2016

Abstract

Contents

2

1 License

— license —

--Copyright The Numerical Algorithms Group Limited 1994.

———-

relative size of the arrow head compared to the length of the arrow — * —

)set break resume
)spool bouquet.output
)set message test on
)set message auto off
)clear all
--S 1 of 4
arrowScale := 0.2@DFLOAT
--R
--R
--R   (1)  0.20000000000000001
--R                                                            Type: DoubleFloat
--E 1

———-

angle of the arrow head — * —

--S 2 of 4
arrowAngle := %pi-%pi/10.0@DFLOAT
--R
--R
--R   (2)  2.8274333882308138
--R                                                            Type: DoubleFloat
--E 2

———-

Add an arrow head to a line segment, which starts at ’p1’, ends at ’p2’, has length ’len’, and and angle ’arg’. We pass ’len’ and ’arg’ as arguments since they were already computed by the calling program

— * —

--S 3 of 4
makeArrow(p1, p2) ==
  delta := p2 - p1
  len := arrowScale * length delta
  theta := atan(delta.1, delta.2)
  c1 := len * cos(theta + arrowAngle)
  s1 := len * sin(theta + arrowAngle)
  c2 := len * cos(theta - arrowAngle)

  s2 := len * sin(theta - arrowAngle)
  z  := p2.3*(1 - arrowScale)
  p3 := point [p2.1 + c1, p2.2 + s1, z, p2.4]
  p4 := point [p2.1 + c2, p2.2 + s2, z, p2.4]
  [[p1, p2, p3], [p2, p4]]
--R
--R                                                                   Type: Void
--E 3
--S 4 of 4
drawBouquet(n,title) ==
  angle := 0.0@DFLOAT
  sp := create3Space()$ThreeSpace(DFLOAT)
  for i in 0..n-1 repeat
    start := point [0.0@DFLOAT,0.0@DFLOAT,0.0@DFLOAT,angle]
    end   := point [cos angle, sin angle, 1.0@DFLOAT, angle]
    arrow := makeArrow(start, end)
    for a in arrow repeat curve(sp,a)
    angle := angle + 2*%pi/n
  makeViewport3D(sp,title)$VIEW3D
--R
--R                                                                   Type: Void
--E 4
)spool
)lisp (bye)

———-

References^{[1] nothing}

5