One benefit of using complex numbers is that you may forget about trigonometry. 

   load'plot'
   circle=._1^n=.(%~i:)60
   ellipse=.(circle*-.a)+(+circle)*a=.0.8
   hyperbola=.-:((+%)j.(-%))^n
   plot circle,ellipse,:hyperbola
   





>________________________________
> Fra: km <[email protected]>
>Til: "[email protected]" <[email protected]> 
>Sendt: 0:40 tirsdag den 17. september 2013
>Emne: Re: [Jprogramming] Plotting complex lists
> 
>
>Summary of results.  The strategy of hyperbola below (plotting a complex 
>table) is not well known.  Henry Rich found it and reported it.
>
>Bo Jacoby gave the best way to change the sign of the real part of a complex 
>number.
>Simply do [: + -   .
>
>
>
>NB. Complex Analytic Geometry
>
>
>NB. How to calculate complex number lists and tables for
>NB. plotting lines, circles, ellipses, and hyperbolas.  How to
>NB. modify these tables to achieve translations, rotations,
>NB. and reflections.  Begin with preliminaries:
>
>
>steps =: {.@] + -~/@] * [ %~ [: i. >:@[
>
>NB.  n steps a,b produces n+1 equally spaced values from a to b
>
>to =: 512 steps ,  NB. Usage a to b for 512 steps from a to b
>
>sin =: 1&o.
>
>cos =: 2&o.
>
>sinh =: 5&o.
>
>cosh =: 6&o.
>
>arcsinh =: _5&o.
>
>
>NB. Now, results
>
>
>line =: 2 : 'm + (n-m)*]'
>
>NB. A line B [ t is point "t of the way from A to B".  Command
>NB.
>NB.    plot 0 line 1j1 [ _1 to 2
>NB.
>NB. shows the line segment from _1j_1 to 2j2
>
>NB. You are plotting a list of 513 complex numbers.
>
>
>parabola =: 1 : '] j. (1 % 4 * m) * *:'
>
>NB. p parabola x produces point x j. y on parabola
>NB. (*: x) = 4*p*y .  Command
>NB.
>NB.    plot 1r4 parabola _2 to 2
>NB.
>NB. plots parabola y = *: x for x from _2 to 2
>
>NB. You are plotting a list of 513 complex numbers.
>
>
>ellipse =: 2 : '((m * cos) j. n * sin) 0 to 2p1'
>
>NB. Suggested by Henry Rich
>
>NB. Command
>NB.
>NB.    plot a ellipse b
>NB.
>NB. plots the ellipse 1 = (*: x % a) + *: y % b .
>
>NB. If a = b you get the circle (*: x) + (*: y) = *: a
>
>
>hyperbola =: 2 : '[: (,: +) (n * sinh) j. m * cosh'
>
>NB. Suggested by Henry Rich
>
>toh =: [: to/ [: arcsinh %~
>
>NB. b toh c,d is (arcsinh c%b) to (arcsinh d%b)
>
>NB. Command
>NB.
>NB.    plot a hyperbola b [ b toh c,d
>NB.
>NB. plots  y^2/a^2 - x^2/b^2 = 1  for x from c to d.
>
>NB. Remember the pattern b [ b toh c,d
>
>NB. You are plotting rows of a 2 by 513 table to get the two
>NB. branches of the hyperbola.
>
>
>NB. Rotations, translations, and reflections
>
>NB. Multiply a complex number list or table by (^&j. theta)
>NB. to rotate all of its points by theta radians.  The center
>NB. of rotation is the origin 0 = 0j0 .
>
>NB. Add 5j3 to a complex list or table to move all of its points
>NB. the distance and direction of 5j3 from 0j0.
>
>NB. Use (+ list) or (+ table) (monadic + is conjugate) to
>NB. reflect all the points of the list or table across the
>NB. line through 0j0 and 1j0 -- the x-axis.  Afterwards
>NB. multiply by (^&j. theta) to achieve a reflection across
>NB. the line through 0j0 and (^&j. theta).
>
>NB. Multiply a positive number p times a list or table to
>NB. achieve an expansion from 0 or compression toward 0
>NB. according as  p > 1  or  p < 1  .
>
>NB. If you want to combine several operations do the
>NB. reflection first and the translation last.
>
>NB. Example
>NB.
>NB.    plot (^&j. theta) * p parabola _2 to 3
>NB.
>NB. plots a parabola rotated by theta radians, with 0j0
>NB. the center of rotation.  If theta is _1r2p1 (that is
>NB. - pi%2 radians) you have converted a  (*: x) = 4 * p * y
>NB. parabola into a  (*: y) = 4 * p * x  parabola.
>
>
>--Kip Murray
>
>Sent from my iPad
>
>----------------------------------------------------------------------
>For information about J forums see http://www.jsoftware.com/forums.htm
>
>
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to