Subversion Repositories wimsdev

Rev

Rev 2071 | Blame | Compare with Previous | Last modification | View Log | RSS feed

!goto $wims_read_parm

:def
title=Plot line
synonyme=line plot, plot line of implicit equation, plot line by equation
input=equation
!exit

:proc
formula=!item 1 of $formula
fml=!mathsubst X=x in $fml
fml=!mathsubst Y=y in $fml
eq==
!if $eq isin $formula
 f=!translate internal = to , in $formula
 !distribute items $f into f1,f2
 !if $f2=$empty or $f1=$empty
  error=bad_formula
  !exit
 !endif
 fml=$f1 - ($f2)
!else
 !if y isvarof $formula
  fml=$formula
  formula=$formula = 0
 !else
  fml=$formula - y
  formula=y = $formula
 !endif
!endif
result=!exec pari eq=$fml; a=polcoeff(eq,1,x); print(a);\
        b=polcoeff(eq,1,y); print(b);\
        c=polcoeff(polcoeff(eq,0,x),0,y); print(c);\
        print(truncate(sqrt(a^2+b^2)));
result=!nonempty lines $result
!distribute lines $result into a,b,c,n
m=$[abs($c)/$n]
cnt=!linecnt $result
!ifval $cnt!=4 or $n=0 or NaN isin $m or Inf isin $m
 result=
 !exit
!endif
!if abs($a) > abs($b)
 px=$[$b]*t-($[$c/($a)])
 py=$[-($a)]*t
 ratio=$[abs($b)/abs($a)]
!else
 px=$[$b]*t
 py=$[-$a]*t-($[$c/($b)])
 ratio=$[abs($a)/abs($b)]
!endif
m=$[2*$m/max($ratio,0.15)^0.7]
!ifval $m=0
 m=5
!endif
!read insplot_set.proc
insplot_set=parametric; size $insplot_size; noborder;\
        arrow from -$m,0 to $m,0 lt 0;\
        arrow from 0,-$m to 0,$m lt 0;\
        xtics axis; ytics axis
!exit

:output
Line define by equation
!htmlmath $formula
 :
<p><center>
!insplot [-$m:$m] [-$m:$m] [-$m:$m] $px,$py notitle lt 1
</center>
!exit