simplegraph.fsp - Frink Server Pages highlighter
[Try simplegraph.fsp]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<HTML LANG="en">
<HEAD>
<TITLE>Interval Graph</TITLE>
<META HTTP-EQUIV="Default-Style" CONTENT="Compact">
<LINK REL="StyleSheet" HREF="/frinkdocs/style2.css" TYPE="text/css"
TITLE="Compact">
<LINK REL="Alternate StyleSheet" HREF="/frinkdocs/spaceship.css"
TYPE="text/css" TITLE="Spaceship">
<LINK REL="Alternate StyleSheet" HREF="/frinkdocs/style.css" TYPE="text/css"
TITLE="APE Classic">
<LINK REL="Alternate StyleSheet" HREF="/frinkdocs/apeairy.css" TYPE="text/css"
TITLE="APE Airy">
<LINK REL="icon" HREF="/images/futureboyicon.png" TYPE="image/png">
<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
</HEAD>
<% // Read in arguments to be graphed, or set up interesting defaults.
if (! func)
{
func = "x^2 + y^2 = 81 sin[x]^2"
xmin = ymin = -10
xmax = ymax = 10
xsteps = 121
ysteps = 39
pscale = 1
} else
{
xmin = eval[xmin]
ymin = eval[ymin]
xmax = eval[xmax]
ymax = eval[ymax]
xsteps = eval[xsteps]
ysteps = eval[ysteps]
pscale = eval[pscale]
}
%>
<BODY>
<H1>Interval Graph</H1>
<P>
<FORM ACTION="simplegraph.fsp" METHOD="get">
Equation: <INPUT TYPE="text" SIZE=60 NAME="func" VALUE="$func
"><BR>
x-axis:
min:<INPUT TYPE="text" SIZE=5 VALUE="$xmin
" NAME="xmin">
max:<INPUT TYPE="text" SIZE=5 VALUE="$xmax
" NAME="xmax">
steps:<INPUT TYPE="text" SIZE=5 VALUE="$xsteps
" NAME="xsteps"><BR>
y-axis:
min <INPUT TYPE="text" SIZE=5 VALUE="$ymin
" NAME="ymin">
max <INPUT TYPE="text" SIZE=5 VALUE="$ymax
" NAME="ymax">
steps:<INPUT TYPE="text" SIZE=5 VALUE="$ysteps
" NAME="ysteps"><BR>
pixel subscaling: <INPUT TYPE="text" SIZE="5" VALUE="$pscale
" NAME="pscale">
<INPUT TYPE="SUBMIT">
</FORM>
</P>
<P>
<TT>
<% // This section performs the actual graphing. Tiny, isn't it?
if func
{
func =~ %s/=/ PEQ / // Replace = with possibly equals
xstep = (xmax-xmin) / xsteps
ystep = (ymax-ymin) / ysteps
xscale = xstep * pscale
yscale = ystep * pscale
for yy=ymax to ymin step -ystep
{
y = new interval[yy, yy+yscale]
for xx=xmin to xmax step xstep
{
x = new interval[xx, xx+xscale]
res = eval[func]
if res
print["""<SPAN TITLE="$x
, $y
">X</SPAN>"""]
else
if res == false
print["."]
else
print["!"] // Evaluation problem (probably divide by zero)
}
println["<BR>"]
}
}
%>
</TT>
</P>
<HR>
<P>
This page uses <A HREF="/frinkdocs/#IntervalArithmetic">Interval
Arithmetic</A> techniques in <A HREF="/frinkdocs/">Frink</A> to graph
arbitrary equations that would be very difficult otherwise. This is
amazingly powerful and subtle, but the code is incredibly simple! You
should <A HREF="highlight.fsp?f=simplegraph.fsp">view the source</A>
of this page to see how little code it actually takes!
</P>
<P>
<I><A HREF="mailto:eliasen@mindspring.com">Alan Eliasen</A></I> was born
<%= round[now[] - #1969-08-19 04:54 PM Mountain#, minute] -> ["days", "hours", "minutes"] %>
ago.
</P>
<P>
Back to <A HREF="/frinkdocs/fspdocs.html">Frink Server Pages
documentation.</A>
</P>
</BODY>
</HTML>
[Try simplegraph.fsp]
Alan Eliasen was born
20203 days, 11 hours, 55 minutes ago.
Back to Frink Server Pages
documentation.