keyword-ized plot, plot and mime docs
svn: r9304
This commit is contained in:
parent
268c82d39b
commit
fbfc9bf883
237
collects/net/scribblings/mime.scrbl
Normal file
237
collects/net/scribblings/mime.scrbl
Normal file
|
@ -0,0 +1,237 @@
|
|||
#lang scribble/doc
|
||||
@(require "common.ss"
|
||||
scribble/struct
|
||||
(for-label net/mime
|
||||
net/mime-unit
|
||||
net/mime-sig))
|
||||
|
||||
@(define-syntax-rule (mime-table (type (sub-type0 ref0) (sub-type ref) ...) ...)
|
||||
(let ([spacer (hspace 1)]
|
||||
[to-flow (lambda (e)
|
||||
(make-flow (list (make-paragraph (list e)))))])
|
||||
(make-table
|
||||
#f
|
||||
(append
|
||||
(list
|
||||
(list (to-flow (scheme 'type))
|
||||
(to-flow spacer)
|
||||
(to-flow (scheme 'sub-type0))
|
||||
(to-flow spacer)
|
||||
(to-flow ref0))
|
||||
(list (to-flow spacer)
|
||||
(to-flow spacer)
|
||||
(to-flow (scheme 'sub-type))
|
||||
(to-flow spacer)
|
||||
(to-flow ref))
|
||||
...)
|
||||
...))))
|
||||
|
||||
@title{MIME: Decoding Internet Data}
|
||||
|
||||
@defmodule[net/mime]{The @schememodname[net/mime] module provides
|
||||
utilities for parsing and creating MIME encodings as described in RFC
|
||||
2045 through RFC 2049.
|
||||
|
||||
The library was written by Francisco Solsona.}
|
||||
|
||||
@; ----------------------------------------
|
||||
|
||||
@section{Message Decoding}
|
||||
|
||||
@defproc[(mime-analyze [message-in (or/c bytes? input-port)]
|
||||
[part? any/c])
|
||||
message?]{
|
||||
|
||||
Parses @scheme[message-in] and returns the parsed result as a
|
||||
@scheme[message] instance.}
|
||||
|
||||
@defstruct[message ([version real?]
|
||||
[entity entity]
|
||||
[fields (listof string?)])]{
|
||||
|
||||
A decoded MIME message. The version is @scheme[1.0] by default. The
|
||||
@scheme[entity] field represents the message data. The @scheme[fields]
|
||||
field contains one string for each field in the message header.}
|
||||
|
||||
@defstruct[entity ([type symbol?]
|
||||
[subtype symbol?]
|
||||
[charset symbol?]
|
||||
[encoding symbol?]
|
||||
[disposition disposition?]
|
||||
[params (listof (cons/c symbol? string?))]
|
||||
[id string?]
|
||||
[description string?]
|
||||
[other (listof string?)]
|
||||
[fields (listof string?)]
|
||||
[parts (listof message?)]
|
||||
[body (output-port? . -> . void?)])]{
|
||||
|
||||
Represents the content of a message or a sub-part.
|
||||
|
||||
Standard values for the @scheme[type] field include @scheme['text],
|
||||
@scheme['image], @scheme['audio], @scheme['video],
|
||||
@scheme['application], @scheme['message], and @scheme['multipart].
|
||||
|
||||
Standard values for the @scheme[subtype] field depend on the
|
||||
@scheme[type] field, and include the following:
|
||||
|
||||
@mime-table[
|
||||
(
|
||||
text (plain "[RFC1521, NSB]")
|
||||
(richtext "[RFC1521, NSB]")
|
||||
(tab-separated-values "[Lindner]")
|
||||
)(
|
||||
multipart (mixed "[RFC1521, NSB]")
|
||||
(alternative "[RFC1521, NSB]")
|
||||
(digest "[RFC1521, NSB]")
|
||||
(parallel "[RFC1521, NSB]")
|
||||
(appledouble "[MacMime, Faltstrom]")
|
||||
(header-set "[Crocker]")
|
||||
)(
|
||||
message (rfc822 "[RFC1521, NSB]")
|
||||
(partial "[RFC1521, NSB]")
|
||||
(external-body "[RFC1521, NSB]")
|
||||
(news "[RFC 1036, Spencer]")
|
||||
)(
|
||||
application (octet-stream "[RFC1521, NSB]")
|
||||
(postscript "[RFC1521, NSB]")
|
||||
(oda "[RFC1521, NSB]")
|
||||
(atomicmail "[atomicmail, NSB]")
|
||||
(andrew-inset "[andrew-inset, NSB]")
|
||||
(slate "[slate, Crowley]")
|
||||
(wita "[Wang Info Transfer, Campbell]")
|
||||
(dec-dx "[Digital Doc Trans, Campbell]")
|
||||
(dca-rft "[IBM Doc Content Arch, Campbell]")
|
||||
(activemessage "[Shapiro]")
|
||||
(rtf "[Lindner]")
|
||||
(applefile "[MacMime, Faltstrom]")
|
||||
(mac-binhex40 "[MacMime, Faltstrom]")
|
||||
(news-message-id "[RFC1036, Spencer]")
|
||||
(news-transmission "[RFC1036, Spencer]")
|
||||
(wordperfect5.1 "[Lindner]")
|
||||
(pdf "[Lindner]")
|
||||
(zip "[Lindner]")
|
||||
(macwriteii "[Lindner]")
|
||||
(msword "[Lindner]")
|
||||
(remote-printing "[RFC1486,MTR]")
|
||||
)(
|
||||
image (jpeg "[RFC1521, NSB]")
|
||||
(gif "[RFC1521, NSB]")
|
||||
(ief "[RFC1314]")
|
||||
(tiff "[MTR]")
|
||||
)(
|
||||
audio (basic "[RFC1521, NSB]")
|
||||
)(
|
||||
video (mpeg "[RFC1521, NSB]")
|
||||
(quicktime "[Lindner]")
|
||||
)]
|
||||
|
||||
Standard values for the @scheme[charset] field include
|
||||
@scheme['us-ascii], which is the default.
|
||||
|
||||
Standard values for the @scheme[encoding] field are @scheme['7bit],
|
||||
@scheme['8bit], @scheme['binary], @scheme['quoted-printable], and
|
||||
@scheme['base64]. The default is @scheme['7bit].
|
||||
|
||||
The @scheme[params] field contains a list of parameters from other
|
||||
MIME headers.
|
||||
|
||||
The @scheme[id] field is taken from the @scheme["Content-Id"] header
|
||||
field.
|
||||
|
||||
The @scheme[description] field is taken from the
|
||||
@scheme["Content-description"] header field.
|
||||
|
||||
The @scheme[other] field contains additional (non-standard) field
|
||||
headers whose field names start with @scheme["Content-"].
|
||||
|
||||
The @scheme[fields] field contains additional field headers whose
|
||||
field names @emph{do not} start with @scheme["Content-"].
|
||||
|
||||
The @scheme[parts] contains sub-parts from multipart MIME
|
||||
messages. This list is non-empty only when @scheme[type] is
|
||||
@scheme['multipart] or @scheme['message].
|
||||
|
||||
The @scheme[body] field represents the body as a function that
|
||||
consumes an output out and writes the decoded message to the port. No
|
||||
bytes are written if @scheme[type] is @scheme['multipart] or
|
||||
@scheme['message]. All of the standard values of @scheme[encoding]
|
||||
are supported. The procedure only works once (since the encoded body
|
||||
is pulled from a stream).}
|
||||
|
||||
@defstruct[disposition ([type symbol?]
|
||||
[filename (or/c string? false/c)]
|
||||
[creation (or/c string? false/c)]
|
||||
[modification (or/c string? false/c)]
|
||||
[read (or/c string? false/c)]
|
||||
[size (or/c exact-nonnegative-integer? false/c)]
|
||||
[params (listof (cons/c symbol? string?))])]{
|
||||
|
||||
Represents a @scheme["Content-Disposition"] header as defined in RFC
|
||||
2183.
|
||||
|
||||
Standard values for the @scheme[type] field include @scheme['inline]
|
||||
and @scheme['attachment].
|
||||
|
||||
The @scheme[filename] field is drawn from the @scheme["filename"]
|
||||
parameter of the @scheme["Content-Disposition"] header, if included in
|
||||
the message.
|
||||
|
||||
The @scheme[creation], @scheme[modification], and @scheme[read] fields
|
||||
represent file timestamps as drawn from the @scheme["creation-date"],
|
||||
@scheme["modification-date"], and @scheme["read-date"] attributes of
|
||||
the @scheme["Content-Disposition"] header, if included in the message.
|
||||
|
||||
The @scheme[size] field is drawn from the @scheme["size"] parameter of
|
||||
the @scheme["Content-Disposition"] header, if included in the message.
|
||||
|
||||
The @scheme[params] field stores any additional attribute bindings of
|
||||
the @scheme["Content-Disposition"] header, if included in the message.}
|
||||
|
||||
@; ----------------------------------------
|
||||
|
||||
@section[#:tag "mime-exns"]{Exceptions}
|
||||
|
||||
@defstruct[mime-error ()]{
|
||||
|
||||
The supertype of all MIME exceptions.}
|
||||
|
||||
@defstruct[(unexpected-termination mime-error) ([msg string?])]{
|
||||
|
||||
Raised when an end-of-file is reached while parsing the headers of a
|
||||
MIME entity. It usually means that the message does not conform
|
||||
to RFC 2045 and friends.}
|
||||
|
||||
@defstruct[(missing-multipart-boundary-parameter mime-error) ()]{
|
||||
|
||||
Raised when a multipart type is specified, but no @scheme["Boundary"]
|
||||
parameter is given or an end-of-file is encountered before the
|
||||
boundary.}
|
||||
|
||||
@defstruct[(malformed-multipart-entity mime-error) ([msg string?])]{
|
||||
|
||||
Similar to @scheme[unexpected-termination], but used only while
|
||||
scanning parts of a multipart message.}
|
||||
|
||||
@defstruct[(empty-mechanism mime-error) ()]{
|
||||
|
||||
Raised when no transport encoding mechanism was provided with the
|
||||
@scheme["Content-Transfer-Encoding"] field.}
|
||||
|
||||
@defstruct[(empty-type mime-error) ()]{
|
||||
|
||||
Raised when no type is specified for @scheme["Content-Type"], or when
|
||||
the specification is incorrectly formatted.}
|
||||
|
||||
|
||||
@defstruct[(empty-subtype mime-error) ()]{
|
||||
|
||||
Raised when no sub-type is specified for @scheme["Content-Type"], or
|
||||
when the specification is incorrectly formatted.}
|
||||
|
||||
|
||||
@defstruct[(empty-disposition-type mime-error) ()]{
|
||||
|
||||
Raised when type specified for the @scheme["Content-Disposition"]
|
||||
field, or when the specification is incorrectly formatted.}
|
||||
|
|
@ -9,13 +9,14 @@
|
|||
@include-section["uri-codec.scrbl"]
|
||||
@include-section["sendurl.scrbl"]
|
||||
@include-section["smtp.scrbl"]
|
||||
@include-section["cgi.scrbl"]
|
||||
@include-section["sendmail.scrbl"]
|
||||
@include-section["head.scrbl"]
|
||||
@include-section["nntp.scrbl"]
|
||||
@include-section["pop3.scrbl"]
|
||||
@include-section["imap.scrbl"]
|
||||
@include-section["pop3.scrbl"]
|
||||
@include-section["mime.scrbl"]
|
||||
@include-section["dns.scrbl"]
|
||||
@include-section["nntp.scrbl"]
|
||||
@include-section["cgi.scrbl"]
|
||||
@include-section["gifwrite.scrbl"]
|
||||
|
||||
@(bibliography
|
||||
|
|
|
@ -1,142 +0,0 @@
|
|||
PLoT collection: Quick Start
|
||||
|
||||
[Note: This guide is excerpted from the official documentation available
|
||||
from Help Desk.]
|
||||
|
||||
2.1 Making basic plots
|
||||
|
||||
After loading the correct module using (require plot) try
|
||||
(plot (line (lambda (x) x)))
|
||||
|
||||
Any other function with the contract number -> number can be plotted
|
||||
using the same form. To plot multiple items, use the functions mix and
|
||||
mix* to combine the items to be plotted
|
||||
|
||||
(plot
|
||||
(mix
|
||||
(line (lambda (x) (sin x)))
|
||||
(line (lambda (x) (cos x)))))
|
||||
|
||||
The display area and appearance of the plot can be changed by adding
|
||||
parenthesized argument/value pairs after the first argument
|
||||
|
||||
(plot
|
||||
(line (lambda (x) (sin x)))
|
||||
(x-min -1) (x-max 1) (title "Sin(x)"))
|
||||
|
||||
The appearance of each individual plot item can be altered by adding
|
||||
parameter-value pairs after the data.
|
||||
|
||||
(plot
|
||||
(line
|
||||
(lambda (x) x)
|
||||
(color 'green) (width 3)))
|
||||
|
||||
Besides plotting lines from functions in 2d, the plotter can also
|
||||
render a variety of other datums in several ways:
|
||||
* Discreet data, such as
|
||||
|
||||
(define data
|
||||
(list
|
||||
(vector 1 1 2)
|
||||
(vector 2 2 2)))
|
||||
can be interpreted in several ways
|
||||
+ As points: (plot (points data))
|
||||
+ As Error Data: (plot (error-bars data))
|
||||
* A function of two variables, such as
|
||||
(define 3dfun (lambda (x y) (* (sin x) (sin y))))
|
||||
can be plotted on a 2d graph
|
||||
+ Using contours to represent height (z)
|
||||
(plot (contour 3dfun))
|
||||
+ Using color shading
|
||||
(plot (shade 3dfun))
|
||||
+ Using a gradient field
|
||||
(plot (vector-field (gradient 3dfun)))
|
||||
or in a 3d box
|
||||
+ Displaying only the top of the surface
|
||||
(plot3d (surface 3dfun))
|
||||
|
||||
[8]2.2 Curve Fitting
|
||||
|
||||
The scheme-plot library uses a Non-Linear Least Squares fit algorithm
|
||||
to fit parametrized functions to given data.
|
||||
|
||||
To fit a particular function to a curve:
|
||||
1. Set up the independent and dependent variable data. The first item
|
||||
in each vector is the independent var, the second is the result.
|
||||
The last item must is the weight of the error - we can leave it as
|
||||
1 since all the items weigh the same.
|
||||
(define data '(#(0 3 1)
|
||||
#(1 5 1)
|
||||
#(2 7 1)
|
||||
#(3 9 1)
|
||||
#(4 11 1)))
|
||||
|
||||
2. Set up the function to be fitted using fit. This particular
|
||||
function looks like a line. The independent variables must come
|
||||
before the parameters.
|
||||
(define fit-fun
|
||||
(lambda (x m b) (+ b (* m x))))
|
||||
3. If possible, come up with some guesses for the values of the
|
||||
parameters. The guesses can be left as one, but each parameter
|
||||
must be named.
|
||||
4. Do the fit - the details of the function are described in [9]Curve
|
||||
Fitting section
|
||||
(define fit-result
|
||||
(fit
|
||||
fit-fun
|
||||
((m 1) (b 1))
|
||||
data)
|
||||
5. View the resulting parameters
|
||||
(fit-result-final-params fit-result) ; will produce ((m 2) (b 3))
|
||||
|
||||
6. For some visual feedback of the fit result, plot the function with
|
||||
the new parameters. For convenience, the structure that is
|
||||
returned by the fit command has already created the function.
|
||||
(plot (mix
|
||||
(points data)
|
||||
(line (fit-result-function fit-result)))
|
||||
(y-max 15))
|
||||
|
||||
A more realistic example can be found in demos/fit-demo-2.ss
|
||||
|
||||
[10]2.3 Creating Custom Plots
|
||||
|
||||
Defining custom plots is simple : a Plot-item (that is passed to plot
|
||||
or mix) is just a function that acts on a [11]view . Both the 2d and
|
||||
3d view snip have several drawing functions defined that the plot-item
|
||||
can call in any order. The full details of the view interface can be
|
||||
found in the [12]plot-extend.ss section.
|
||||
|
||||
For example, if we wanted to create a constructor that creates
|
||||
Plot-items that draw dashed-lines given a number-number function we
|
||||
could do the following:
|
||||
|
||||
; Load the required modules
|
||||
(require mzlib/class
|
||||
mzlib/etc
|
||||
(lib "plot-extend.ss" "plot"))
|
||||
|
||||
|
||||
; Set up the constructor
|
||||
(define-plot-type dashed-line
|
||||
fun 2dview (x-min x-max) ((samples 100) (segments 20) (color 'red) (width 1))
|
||||
(let* ((dash-size (/ (- x-max x-min) segments))
|
||||
(x-lists (build-list
|
||||
(/ segments 2)
|
||||
(lambda (index)
|
||||
(x-values
|
||||
(/ samples segments)
|
||||
(+ x-min (* 2 index dash-size))
|
||||
(+ x-min (* (add1 ( * 2 index)) dash-size)))))))
|
||||
(send* 2dview
|
||||
(set-line-color color)
|
||||
(set-line-width width))
|
||||
(for-each
|
||||
(lambda (dash)
|
||||
(send 2dview plot-line
|
||||
(map (lambda (x) (vector x (fun x))) dash)))
|
||||
x-lists)))
|
||||
|
||||
; Plot a test case
|
||||
(plot (dashed-line (lambda (x) x) (color 'blue)))
|
8
collects/plot/extend.ss
Normal file
8
collects/plot/extend.ss
Normal file
|
@ -0,0 +1,8 @@
|
|||
#lang scheme
|
||||
|
||||
(require "plot-extend.ss"
|
||||
"view.ss")
|
||||
|
||||
(provide (except-out (all-from-out "plot-extend.ss")
|
||||
define-plot-type)
|
||||
plot-view%)
|
|
@ -2,4 +2,6 @@
|
|||
|
||||
(define pre-install-collection "pre-installer.ss")
|
||||
|
||||
(define scribblings '(("plot.scrbl" (multi-page))))
|
||||
|
||||
(define compile-omit-paths '("demos"))
|
||||
|
|
|
@ -1,4 +1,147 @@
|
|||
#lang scheme/base
|
||||
|
||||
(require (prefix-in orig:
|
||||
(only-in "plot.ss"
|
||||
plot plot3d
|
||||
points line error-bars
|
||||
vector-field contour
|
||||
shade surface
|
||||
mix fit
|
||||
derivative gradient make-vec)))
|
||||
|
||||
(provide plot
|
||||
plot3d
|
||||
plot-color?
|
||||
points
|
||||
line
|
||||
error-bars
|
||||
vector-field
|
||||
contour
|
||||
shade
|
||||
surface
|
||||
(rename-out [orig:mix mix]
|
||||
[orig:fit fit]
|
||||
[orig:derivative derivative]
|
||||
[orig:gradient gradient]
|
||||
[orig:make-vec make-vec]))
|
||||
|
||||
(define-syntax-rule (out-fit-struct)
|
||||
(begin
|
||||
(require "plot.ss")
|
||||
(provide (all-from-out "plot.ss"))
|
||||
(provide (struct-out fit-result))))
|
||||
|
||||
(out-fit-struct)
|
||||
|
||||
(define-syntax-rule (define-plot plot orig:plot
|
||||
[arg-extra ...]
|
||||
[init-extra ...])
|
||||
(define (plot data
|
||||
#:width [width 400]
|
||||
#:height [height 400]
|
||||
#:x-min [x-min -5]
|
||||
#:x-max [x-max 5]
|
||||
#:y-min [y-min -5]
|
||||
#:y-max [y-max 5]
|
||||
#:x-label [x-label "X axis"]
|
||||
#:y-label [y-label "Y axis"]
|
||||
#:title [title ""]
|
||||
#:fgcolor [fgcolor '(0 0 0)]
|
||||
#:bgcolor [bgcolor '(255 255 255)]
|
||||
#:lncolor [lncolor '(255 0 0)]
|
||||
arg-extra ...)
|
||||
(orig:plot data
|
||||
[width width]
|
||||
[height height]
|
||||
[x-min x-min]
|
||||
[x-max x-max]
|
||||
[y-min y-min]
|
||||
[y-max y-max]
|
||||
[x-label x-label]
|
||||
[y-label y-label]
|
||||
[title title]
|
||||
[fgcolor fgcolor]
|
||||
[bgcolor bgcolor]
|
||||
[lncolor lncolor]
|
||||
init-extra ...)))
|
||||
|
||||
(define-plot plot orig:plot [] [])
|
||||
|
||||
(define-plot plot3d orig:plot3d
|
||||
[#:z-min [z-min -5]
|
||||
#:z-max [z-max 5]
|
||||
#:z-label [z-label "Z axis"]
|
||||
#:alt [alt 30]
|
||||
#:az [az 45]]
|
||||
[[z-min z-min]
|
||||
[z-max z-max]
|
||||
[z-label z-label]
|
||||
[alt alt]
|
||||
[az az]])
|
||||
|
||||
(define (plot-color? v)
|
||||
(memq v '(white black yellow green aqua pink
|
||||
wheat grey blown blue violet cyan
|
||||
turquoise magenta salmon red)))
|
||||
|
||||
(define (points vecs
|
||||
#:sym [sym 'square]
|
||||
#:color [color 'black])
|
||||
(orig:points vecs [sym sym] [color color]))
|
||||
|
||||
(define (line f
|
||||
#:samples [samples 150]
|
||||
#:width [width 1]
|
||||
#:color [color 'red]
|
||||
#:mode [mode 'standard]
|
||||
#:mapping [mapping 'cartesian]
|
||||
#:t-min [t-min -5]
|
||||
#:t-max [t-max 5])
|
||||
(orig:line f
|
||||
[samples samples]
|
||||
[width width]
|
||||
[color color]
|
||||
[mode mode]
|
||||
[mapping mapping]
|
||||
[t-min t-min]
|
||||
[t-max t-max]))
|
||||
|
||||
(define (error-bars vec
|
||||
#:color [color 'black])
|
||||
(orig:error-bars vec [color color]))
|
||||
|
||||
(define (vector-field f
|
||||
#:width [width 1]
|
||||
#:color [color 'red]
|
||||
#:style [style 'scaled])
|
||||
(orig:vector-field f
|
||||
[width width]
|
||||
[color color]
|
||||
[style style]))
|
||||
|
||||
(define (contour f
|
||||
#:samples [samples 50]
|
||||
#:width [width 1]
|
||||
#:color [color 'black]
|
||||
#:levels [levels 10])
|
||||
(orig:contour f
|
||||
[samples samples]
|
||||
[width width]
|
||||
[color color]
|
||||
[levels levels]))
|
||||
|
||||
(define (shade f
|
||||
#:samples [samples 50]
|
||||
#:levels [levels 10])
|
||||
(orig:shade f
|
||||
[samples samples]
|
||||
[levels levels]))
|
||||
|
||||
(define (surface f
|
||||
#:samples [samples 50]
|
||||
#:width [width 1]
|
||||
#:color [color 'black])
|
||||
(orig:surface f
|
||||
[samples samples]
|
||||
[width width]
|
||||
[color color]))
|
||||
|
||||
|
|
|
@ -107,6 +107,6 @@
|
|||
body))))))])))]))
|
||||
(provide
|
||||
define-plot-type
|
||||
(all-from plot/view)
|
||||
(all-from-except plot/view plot-view%)
|
||||
(all-from plot/renderer-helpers)))
|
||||
|
||||
|
|
669
collects/plot/plot.scrbl
Normal file
669
collects/plot/plot.scrbl
Normal file
|
@ -0,0 +1,669 @@
|
|||
#lang scribble/doc
|
||||
@(require scribble/manual
|
||||
(for-label scheme
|
||||
scheme/gui/base
|
||||
plot
|
||||
plot/extend))
|
||||
|
||||
@title{@bold{PLoT}: Graph Plotting}
|
||||
|
||||
PLoT (a.k.a. PLTplot) provides a basic interface for producing common
|
||||
types of plots such as line and vector field plots as well as an
|
||||
advanced interface for producing customized plot types. Additionally,
|
||||
plots and plot-items are first-class values and can be generated in
|
||||
and passed to other programs.
|
||||
|
||||
@table-of-contents[]
|
||||
|
||||
@section{Quick Start}
|
||||
|
||||
@subsection{Overview}
|
||||
|
||||
PLoT (aka PLTplot) provides a basic interface for producing common
|
||||
types of plots such as line and vector field plots as well as an
|
||||
advanced interface for producing customized plot types. Additionally,
|
||||
plots and plot-items are first-class values and can be generated in
|
||||
and passed to other programs.
|
||||
|
||||
@subsection{Basic Plotting}
|
||||
|
||||
After loading the correct module using @scheme[(require plot)] try
|
||||
|
||||
@schemeblock[(plot (line (lambda (x) x)))]
|
||||
|
||||
Any other function using the contract @scheme[(real? . -> . real?)]
|
||||
can be plotted using the same form. To plot multiple items, use the
|
||||
functions @scheme[mix] and @scheme[mix*] to combine the items to be
|
||||
plotted.
|
||||
|
||||
@schemeblock[
|
||||
(plot (mix (line (lambda (x) (sin x)))
|
||||
(line (lambda (x) (cos x)))))
|
||||
]
|
||||
|
||||
The display area and appearance of the plot can be changed by adding
|
||||
bracjets argument/value pairs after the first argument.
|
||||
|
||||
@schemeblock[
|
||||
(plot (line (lambda (x) (sin x)))
|
||||
#:x-min -1 #:x-max 1 #:title "Sin(x)")
|
||||
]
|
||||
|
||||
The appearance of each individual plot item can be altered by adding
|
||||
argument/value pairs after the data.
|
||||
|
||||
@schemeblock[
|
||||
(plot (line (lambda (x) x)
|
||||
#:color 'green #:width 3))
|
||||
]
|
||||
|
||||
Besides plotting lines from functions in 2-D, the plotter can also
|
||||
render a variety of other data in several ways:
|
||||
|
||||
@itemize{
|
||||
|
||||
@item{Discrete data, such as
|
||||
|
||||
@schemeblock[
|
||||
(define data (list (vector 1 1 2)
|
||||
(vector 2 2 2)))
|
||||
]
|
||||
|
||||
can be interpreted in several ways:
|
||||
|
||||
@itemize{
|
||||
|
||||
@item{As points: @scheme[(plot (points _data))]}
|
||||
|
||||
@item{As error data: @scheme[(plot (error-bars _data))]}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@item{A function of two variables, such as
|
||||
|
||||
@schemeblock[
|
||||
(define 3dfun (lambda (x y) (* (sin x) (sin y))))
|
||||
]
|
||||
|
||||
can be plotted on a 2d graph
|
||||
|
||||
@itemize{
|
||||
|
||||
@item{Using contours to represent height (z)
|
||||
|
||||
@schemeblock[
|
||||
(plot (contour 3dfun))
|
||||
]
|
||||
}
|
||||
|
||||
@item{Using color shading
|
||||
|
||||
@schemeblock[
|
||||
(plot (shade 3dfun))
|
||||
]
|
||||
}
|
||||
|
||||
@item{Using a gradient field
|
||||
|
||||
@schemeblock[
|
||||
(plot (vector-field (gradient 3dfun)))
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
or in a 3d box
|
||||
|
||||
@itemize{
|
||||
|
||||
@item{Displaying only the top of the surface
|
||||
|
||||
@schemeblock[
|
||||
(plot3d (surface 3dfun))
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@subsection[#:tag "ex-curve-fit"]{Curve Fitting}
|
||||
|
||||
The @schememodname[plot] library uses a non-linear, least-squares fit
|
||||
algorithm to fit parameterized functions to given data.
|
||||
|
||||
To fit a particular function to a curve:
|
||||
|
||||
@itemize{
|
||||
|
||||
@item{Set up the independent and dependent variable data. The first
|
||||
item in each vector is the independent variable, the second is the
|
||||
result. The last item is the weight of the error; we can leave it
|
||||
as @scheme[1] since all the items weigh the same.
|
||||
|
||||
@schemeblock[
|
||||
(define data '(#(0 3 1)
|
||||
#(1 5 1)
|
||||
#(2 7 1)
|
||||
#(3 9 1)
|
||||
#(4 11 1)))
|
||||
]
|
||||
}
|
||||
|
||||
@item{Set up the function to be fitted using fit. This particular
|
||||
function looks like a line. The independent variables must come
|
||||
before the parameters.
|
||||
|
||||
@schemeblock[
|
||||
(define fit-fun
|
||||
(lambda (x m b) (+ b (* m x))))
|
||||
]
|
||||
}
|
||||
|
||||
@item{If possible, come up with some guesses for the values of the
|
||||
parameters. The guesses can be left as one, but each parameter must
|
||||
be named.}
|
||||
|
||||
@item{Do the fit; the details of the function are described in
|
||||
@secref["curve-fit"].
|
||||
|
||||
@schemeblock[
|
||||
(define fit-result
|
||||
(fir fit-fun
|
||||
'((m 1) (b 1))
|
||||
data))
|
||||
]
|
||||
}
|
||||
|
||||
@item{View the resulting parameters; for example,
|
||||
|
||||
@schemeblock[
|
||||
(fit-result-final-params fit-result)
|
||||
]
|
||||
|
||||
will produce @schemeresultfont{((m 2) (b 3))}.
|
||||
}
|
||||
|
||||
@item{For some visual feedback of the fit result, plot the function
|
||||
with the new parameters. For convenience, the structure that is
|
||||
returned by the fit command has already the function.
|
||||
|
||||
@schemeblock[
|
||||
(plot (mix (points data)
|
||||
(line (fit-result-function fit-result)))
|
||||
#:y-max 15)
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
A more realistic example can be found in
|
||||
@filepath{demos/fit-demo-2.ss} in the @filepath{plot} collection.
|
||||
|
||||
@subsection{Creating Custom Plots}
|
||||
|
||||
Defining custom plots is simple: a plot-item (that is passed to plot
|
||||
or mix) is just a function that acts on a view. Both the 2-D and 3-D
|
||||
view snip have several drawing functions defined that the plot-item
|
||||
can call in any order. The full details of the view interface can be
|
||||
found in @secref["extend"].
|
||||
|
||||
For example, if we wanted to create a constructor that creates
|
||||
plot-items that draw dashed lines given a @scheme[(real? . -> . real?)]
|
||||
function, we could do the following:
|
||||
|
||||
@schemeblock[
|
||||
(require plot/extend)
|
||||
|
||||
(define (dashed-line fun
|
||||
#:x-min [x-min -5]
|
||||
#:x-max [x-max 5]
|
||||
#:sample [sample 100]
|
||||
#:segments [segments 20]
|
||||
#:color [color 'red]
|
||||
#:width [width 1])
|
||||
(let* ((dash-size (/ (- x-max x-min) segments))
|
||||
(x-lists (build-list
|
||||
(/ segments 2)
|
||||
(lambda (index)
|
||||
(x-samples
|
||||
(/ samples segments)
|
||||
(+ x-min (* 2 index dash-size))
|
||||
(+ x-min (* (add1 (* 2 index))
|
||||
dash-size)))))))
|
||||
(lambda (2dview)
|
||||
(send 2dview set-line-color color)
|
||||
(send 2dview set-line-width width)
|
||||
(for-each
|
||||
(lambda (dash)
|
||||
(send 2dview plot-line
|
||||
(map (lambda (x) (vector x (fun x))) dash)))
|
||||
x-lists))))
|
||||
]
|
||||
|
||||
Plot a test case using @scheme[dashed-line]:
|
||||
|
||||
@schemeblock[
|
||||
(plot (dashed-line (lambda (x) x) #:color 'blue))
|
||||
]
|
||||
|
||||
@; ----------------------------------------
|
||||
|
||||
@section[#:tag "plot"]{Plotting}
|
||||
|
||||
@defmodule[plot]
|
||||
|
||||
The @schememodname[plot] library provides the ability to make basic
|
||||
plots, fit curves to data, and some useful miscellaneous functions.
|
||||
|
||||
@subsection{Plotting}
|
||||
|
||||
The @scheme[plot] and @scheme[plot3d] functions generate plots that can be
|
||||
viewed in the DrScheme interactions window.
|
||||
|
||||
@defproc[(plot [data ((is-a?/c 2d-view%) . -> . void?)]
|
||||
[#:width width real? 400]
|
||||
[#:height height real? 400]
|
||||
[#:x-min x-min real? -5]
|
||||
[#:x-max x-max real? 5]
|
||||
[#:y-min y-min real? -5]
|
||||
[#:y-max y-max real? 5]
|
||||
[#:x-label x-label string? "X axis"]
|
||||
[#:y-label y-label string? "Y axis"]
|
||||
[#:title title string? ""]
|
||||
[#:fgcolor fgcolor (list/c byte? byte? byte) '(0 0 0)]
|
||||
[#:bgcolor bgcolor (list/c byte? byte? byte) '(255 255 255)]
|
||||
[#:lncolor lncolor (list/c byte? byte? byte) '(255 0 0)])
|
||||
(is-a?/c snip%)]{
|
||||
|
||||
Plots @scheme[data] in 2-D, where @scheme[data] is generated by
|
||||
functions like @scheme[points] or @scheme[lines].
|
||||
|
||||
A @scheme[data] value is represented as a procedure that takes a
|
||||
@scheme[2d-view%] instance and adds plot information to it.}
|
||||
|
||||
@defproc[(plot3d [data ((is-a?/c 3d-view%) . -> . void?)]
|
||||
[#:width width real? 400]
|
||||
[#:height height real? 400]
|
||||
[#:x-min x-min real? -5]
|
||||
[#:x-max x-max real? 5]
|
||||
[#:y-min y-min real? -5]
|
||||
[#:y-max y-max real? 5]
|
||||
[#:z-min z-min real? -5]
|
||||
[#:z-max z-max real? 5]
|
||||
[#:alt alt real? 30]
|
||||
[#:az az real? 45]
|
||||
[#:x-label x-label string? "X axis"]
|
||||
[#:y-label y-label string? "Y axis"]
|
||||
[#:z-label z-label string? "Z axis"]
|
||||
[#:title title string? ""]
|
||||
[#:fgcolor fgcolor (list/c byte? byte? byte) '(0 0 0)]
|
||||
[#:bgcolor bgcolor (list/c byte? byte? byte) '(255 255 255)]
|
||||
[#:lncolor lncolor (list/c byte? byte? byte) '(255 0 0)])
|
||||
(is-a?/c snip%)]{
|
||||
|
||||
Plots @scheme[data] in 3-D, where @scheme[data] is generated by a
|
||||
function like @scheme[surface]. The arguments @scheme[alt] and
|
||||
@scheme[az] set the viewing altitude (in degrees) and the azimuth
|
||||
(also in degrees), respectively.
|
||||
|
||||
A 3-D @scheme[data] value is represented as a procedure that takes a
|
||||
@scheme[3d-view%] instance and adds plot information to it.}
|
||||
|
||||
|
||||
@defproc[(points [vecs (listof (vector/c real? real?))]
|
||||
[#:sym sym (one-of/c 'square 'circle 'odot 'bullet) 'square]
|
||||
[#:color color plot-color? 'black])
|
||||
((is-a?/c 2d-view%) . -> . void?)]{
|
||||
|
||||
Creates 2-D plot data (to be provided to @scheme[plot]) given a list
|
||||
of points specifying locations. The @scheme[sym] argument determines
|
||||
the appearance of the points.}
|
||||
|
||||
|
||||
|
||||
@defproc[(line [f (real? . -> . (or/c real? (vector real? real?)))]
|
||||
[#:samples samples exact-nonnegative-integer? 150]
|
||||
[#:width width exact-positive-integer? 1]
|
||||
[#:color color plot-color? 'red]
|
||||
[#:mode mode (one-of/c 'standard 'parametric) 'standard]
|
||||
[#:mapping mapping (or-of/c 'cartesian 'polar) 'cartesian]
|
||||
[#:t-min t-min real? -5]
|
||||
[#:t-max t-min real? 5])
|
||||
((is-a?/c 2d-view%) . -> . void?)]{
|
||||
|
||||
Creates 2-D plot data to draw a line.
|
||||
|
||||
The line is specified in either functional, i.e. @math{y = f(x)}, or
|
||||
parametric, i.e. @math{x,y = f(t)}, mode. If the function is
|
||||
parametric, the @scheme[mode] argument must be set to
|
||||
@scheme['parametric]. The @scheme[t-min] and @scheme[t-max] arguments
|
||||
set the parameter when in parametric mode.}
|
||||
|
||||
|
||||
@defproc[(error-bars [vecs (listof (vector/c real? real? real?))]
|
||||
[#:color color plot-color? 'black])
|
||||
((is-a?/c 2d-view%) . -> . void?)]{
|
||||
|
||||
Creates 2-D plot data for error bars given a list of vectors. Each
|
||||
vector specifies the center of the error bar @math{(x,y)} as the first
|
||||
two elements and its magnitude as the third.}
|
||||
|
||||
|
||||
@defproc[(vector-field [f ((vector real? real?) . -> . (vector real? real?))]
|
||||
[#:width width exact-positive-integer? 1]
|
||||
[#:color color plot-color? 'red]
|
||||
[#:style style (one-of/c 'scaled 'normalized 'read) 'scaled])
|
||||
((is-a?/c 2d-view%) . -> . void?)]{
|
||||
|
||||
Creates 2-D plot data to draw a vector-field from a vector-valued
|
||||
function.}
|
||||
|
||||
|
||||
@defproc[(contour [f (real? real? . -> . real?)]
|
||||
[#:samples samples exact-nonnegative-integer? 50]
|
||||
[#:width width exact-positive-integer? 1]
|
||||
[#:color color plot-color? 'black]
|
||||
[#:levels levels (or/c exact-nonnegative-integer?
|
||||
(listof real?))
|
||||
10])
|
||||
((is-a?/c 2d-view%) . -> . void?)]{
|
||||
|
||||
Creates 2-D plot data to draw contour lines, rendering a 3-D function
|
||||
a 2-D graph cotours (respectively) to represent the value of the
|
||||
function at that position.}
|
||||
|
||||
@defproc[(shade [f (real? real? . -> . real?)]
|
||||
[#:samples samples exact-nonnegative-integer? 50]
|
||||
[#:levels levels (or/c exact-nonnegative-integer?
|
||||
(listof real?))
|
||||
10])
|
||||
((is-a?/c 2d-view%) . -> . void?)]{
|
||||
|
||||
Creates 2-D plot data to draw like @scheme[contour], except using
|
||||
shading instead of contour lines.}
|
||||
|
||||
|
||||
@defproc[(surface [f (real? real? . -> . real?)]
|
||||
[#:samples samples exact-nonnegative-integer? 50]
|
||||
[#:width width exact-positive-integer? 1]
|
||||
[#:color color plot-color? 'black])
|
||||
((is-a?/c 3d-view%) . -> . void?)]{
|
||||
|
||||
Creates 3-D plot data to draw a 3-D surface in a 2-D box, showing only
|
||||
the @italic{top} of the surface.}
|
||||
|
||||
|
||||
@defproc[(mix [data (any/c . -> . void?)] ...+)
|
||||
(any/c . -> . void?)]{
|
||||
|
||||
Creates a procedure that calls each @scheme[data] on its argument in
|
||||
order. Thus, this function can composes multiple plot @scheme[data]s
|
||||
into a single data.}
|
||||
|
||||
|
||||
@defproc[(plot-color? [v any/c]) boolean?]{
|
||||
|
||||
Returns @scheme[#t] if @scheme[v] is one of the following symbols,
|
||||
@scheme[#f] otherwise:
|
||||
|
||||
@schemeblock[
|
||||
'white 'black 'yellow 'green 'aqua 'pink
|
||||
'wheat 'grey 'blown 'blue 'violet 'cyan
|
||||
'turquoise 'magenta 'salmon 'red
|
||||
]}
|
||||
|
||||
@; ----------------------------------------
|
||||
|
||||
@subsection[#:tag "curve-fit"]{Curve Fitting}
|
||||
|
||||
PLoT uses the standard Non-Linear Least Squares fit algorithm for
|
||||
curve fitting. The code that implements the algorithm is public
|
||||
domain, and is used by the @tt{gnuplot} package.
|
||||
|
||||
@defproc[(fit [f (real? ... . -> . real?)]
|
||||
[guess-list (list/c (cons symbol? real?))]
|
||||
[data (or/c (list-of (vector/c real? real? real?))
|
||||
(list-of (vector/c real? real? real? real?)))])
|
||||
fit-result?]{
|
||||
|
||||
Attempts to fit a @defterm{fittable function} to the data that is
|
||||
given. The @scheme[guess-list] should be a set of arguments and
|
||||
values. The more accurate your initial guesses are, the more likely
|
||||
the fit is to succeed; if there are no good values for the guesses,
|
||||
leave them as @scheme[1].}
|
||||
|
||||
@defstruct[fit-result ([rms any/c]
|
||||
[variance any/c]
|
||||
[names (listof symbol?)]
|
||||
[final-params (listof (cons/c symbol? real?))]
|
||||
[std-error real?]
|
||||
[std-error-percent real?]
|
||||
[function (real? ... . -> . real?)])]{
|
||||
|
||||
The @scheme[params] field contains an associative list of the
|
||||
parameters specified in @scheme[fit] and their values. Note that the
|
||||
values may not be correct if the fit failed to converge. For a visual
|
||||
test, use the @scheme[function] field to get the function with the
|
||||
parameters in place and plot it along with the original data.}
|
||||
|
||||
@; ----------------------------------------
|
||||
|
||||
@subsection{Miscellaneous Functions}
|
||||
|
||||
@defproc[(derivative [f (real? . -> . real?)] [h real? .000001])
|
||||
(real? . -> . real?)]{
|
||||
|
||||
Creates a function that evaluates the numeric derivative of
|
||||
@scheme[f]. The given @scheme[h] is the divisor used in the
|
||||
calculation.}
|
||||
|
||||
@defproc[(gradient [f (real? real? . -> . real?)] [h real? .000001])
|
||||
((vector/c real? real?) . -> . (vector/c real? real?))]{
|
||||
|
||||
Creates a vector-valued function that the numeric gradient of
|
||||
@scheme[f].}
|
||||
|
||||
@defproc[(make-vec [fx (real? real? . -> . real?)] [fy (real? real? . -> . real?)])
|
||||
((vector/c real? real?) . -> . (vector/c real? real?))]{
|
||||
|
||||
Creates a vector-values function from two parts.}
|
||||
|
||||
@; ----------------------------------------
|
||||
|
||||
@section[#:tag "extend"]{Customizing Plots}
|
||||
|
||||
@defmodule[plot/extend]
|
||||
|
||||
The @schememodname[plot/extend] module allows you to create your own
|
||||
constructors, further customize the appearance of the plot windows,
|
||||
and in general extend the package.
|
||||
|
||||
@defproc[(sample-size [sample-count exact-positive-integer?]
|
||||
[x-min number]
|
||||
[x-max number])
|
||||
real?]{
|
||||
|
||||
Given @scheme[sample-count], @scheme[x-min], and @scheme[x-max], returns the size of each sample.}
|
||||
|
||||
|
||||
@defproc[(scale-vectors [vecs (listof vector?)] [x-sample-size real?] [y-sample-size real?])
|
||||
(listof vector?)]{
|
||||
|
||||
Scales vectors, causing them to fit in their boxes.}
|
||||
|
||||
|
||||
@defproc[(x-values [sample-count exact-positive-integer?]
|
||||
[x-min number]
|
||||
[x-max number])
|
||||
(listof real?)]{
|
||||
|
||||
Given @scheme[samples], @scheme[x-min], and @scheme[x-max], returns a
|
||||
list of @scheme[x]s spread across the range.}
|
||||
|
||||
|
||||
@defproc[(normalize-vector [vec vector?] [x-sample-size real?] [y-sample-size real?]) vector?]{
|
||||
|
||||
Normalizes @scheme[vec] based on @scheme[x-sample-size] and @scheme[y-sample-size].}
|
||||
|
||||
|
||||
@defproc[(normalize-vectors [vecs (listof vector?)] [x-sample-size real?] [y-sample-size real?])
|
||||
(listof vector?)]{
|
||||
|
||||
Normalizes @scheme[vecs] based on @scheme[x-sample-size] and @scheme[y-sample-size].}
|
||||
|
||||
|
||||
@defproc[(make-column [x real?] [ys (listof real?)]) (listof (vector/c real? real?))]{
|
||||
|
||||
Given an @scheme[x] and a list of @scheme[_y]s, produces a list of
|
||||
points pairing the @scheme[x] with each of the @scheme[_y]s.}
|
||||
|
||||
|
||||
@defproc[(xy-list [sample-count exact-positive-integer?]
|
||||
[x-min real?]
|
||||
[x-max real?]
|
||||
[y-min real?]
|
||||
[y-max real?])
|
||||
(listof (listof (vector/c real? real?)))]{
|
||||
|
||||
Makes a list of all the positions on the graph.}
|
||||
|
||||
|
||||
@defproc[(zgrid [f (real? real? . -> . real?)]
|
||||
[xs (listof real?)]
|
||||
[ys (listof real?)])
|
||||
(listof (listof real?))]{
|
||||
|
||||
Given a function that consumes @scheme[_x] and @scheme[_y] to produce
|
||||
@scheme[_z], a list of @scheme[_x]s, and a list of @scheme[_y]s,
|
||||
produces a list of @scheme[_z] column values.}
|
||||
|
||||
@; ----------------------------------------
|
||||
|
||||
@defclass[plot-view% object% ()]{
|
||||
|
||||
@defmethod[(get-x-min) real?]{
|
||||
|
||||
Returns the minimum plottable @scheme[_x] coordinate.}
|
||||
|
||||
@defmethod[(get-y-min) real?]{
|
||||
|
||||
Returns the minimum plottable @scheme[_y] coordinate.}
|
||||
|
||||
@defmethod[(get-x-max) real?]{
|
||||
|
||||
Returns the maximum plottable @scheme[_x] coordinate.}
|
||||
|
||||
@defmethod[(get-y-max) real?]{
|
||||
|
||||
Returns the maximum plottable @scheme[_y] coordinate.}
|
||||
|
||||
@defmethod[(set-line-color [color plot-color?]) void?]{
|
||||
|
||||
Sets the drawing color.}
|
||||
|
||||
@defmethod[(set-line-width [width real?]) void?]{
|
||||
|
||||
Sets the drawing line width.}
|
||||
|
||||
}
|
||||
|
||||
@; ----------------------------------------
|
||||
|
||||
@defclass[2d-view% plot-view% ()]{
|
||||
|
||||
Provides an interface to drawing 2-D plots. An instance of
|
||||
@scheme[2d-view%] is created by @scheme[plot], and the following
|
||||
methods can be used to adjust it.
|
||||
|
||||
@defmethod[(set-labels [x-label string?]
|
||||
[y-label string?]
|
||||
[title string?])
|
||||
void?]{
|
||||
|
||||
Sets the axis labels and title.}
|
||||
|
||||
|
||||
@defmethod[(plot-vector [head (vector/c real? real?)]
|
||||
[tail (vector/c real? real?)])
|
||||
void?]{
|
||||
|
||||
Plots a single vector.}
|
||||
|
||||
|
||||
@defmethod[(plot-vectors [vecs (listof (list/c (vector/c real? real?)
|
||||
(vector/c real? real?)))])
|
||||
void?]{
|
||||
|
||||
Plots a set of vectors.}
|
||||
|
||||
|
||||
@defmethod[(plot-points [points (listof (vector/c real? real?))]
|
||||
[sym (one-of/c 'square 'circle 'odot 'bullet)])
|
||||
void?]{
|
||||
|
||||
Plots points using a specified symbol.}
|
||||
|
||||
|
||||
@defmethod[(plot-line [points (listof (vector/c real? real?))]) void?]{
|
||||
|
||||
Plots a line given a set of points.}
|
||||
|
||||
|
||||
@defmethod[(plot-contours [grid (listof (listof real?))]
|
||||
[xs (listof real?)]
|
||||
[ys (listof real?)]
|
||||
[levels (listof real?)]) void?]{
|
||||
|
||||
Plots a grid representing a 3-D function using contours to distinguish levels.}
|
||||
|
||||
@defmethod[(plot-shades [grid (listof (listof real?))]
|
||||
[xs (listof real?)]
|
||||
[ys (listof real?)]
|
||||
[levels (listof real?)]) void?]{
|
||||
|
||||
Plots a grid representing a 3-D function using shades to show levels.}
|
||||
|
||||
}
|
||||
|
||||
@; ----------------------------------------
|
||||
|
||||
@defclass[3d-view% plot-view% ()]{
|
||||
|
||||
Provides an interface to drawing 3-D plots. An instance of
|
||||
@scheme[3d-view%] is created by @scheme[plot3d], and the following
|
||||
methods can be used to adjust it.
|
||||
|
||||
|
||||
@defmethod[(plot-surface [xs (listof real?)]
|
||||
[ys (listof real?)]
|
||||
[zs (listof real?)]) void?]{
|
||||
|
||||
Plots a grid representing a 3d function in a 3d box, showing only the
|
||||
top of the surface.}
|
||||
|
||||
|
||||
@defmethod[(plot-line [xs (listof real?)]
|
||||
[ys (listof real?)]
|
||||
[zs (listof real?)]) void?]{
|
||||
|
||||
Plots a line in 3-D space.}
|
||||
|
||||
|
||||
@defmethod[(get-z-min) real?]{
|
||||
|
||||
Returns the minimum plottable @scheme[_z] coordinate.}
|
||||
|
||||
@defmethod[(get-z-max) real?]{
|
||||
|
||||
Returns the maximum plottable @scheme[_z] coordinate.}
|
||||
|
||||
|
||||
@defmethod[(get-alt) real?]{
|
||||
|
||||
Returns the altitude (in degrees) from which the 3-D box is viewed.}
|
||||
|
||||
@defmethod[(get-az) real?]{
|
||||
|
||||
Returns the azimuthal angle.}
|
||||
|
||||
}
|
|
@ -334,5 +334,6 @@
|
|||
(plot)))
|
||||
|
||||
(provide
|
||||
plot-view%
|
||||
2d-view%
|
||||
3d-view%))
|
||||
|
|
|
@ -1600,7 +1600,8 @@ follows.
|
|||
first @scheme[provide-spec], but omitting the bindings listed in each
|
||||
subsequent @scheme[provide-spec]. If one of the latter bindings is
|
||||
not included in the initial @scheme[provide-spec], a syntax error is
|
||||
reported.}
|
||||
reported. The symbolic export name information in the latter
|
||||
@scheme[provide-spec]s is ignored; only the bindings are used.}
|
||||
|
||||
@defsubform[(prefix-out prefix-id provide-spec)]{
|
||||
Like @scheme[provide-spec], but with each symbolic export name from
|
||||
|
|
|
@ -265,12 +265,13 @@
|
|||
(lexer
|
||||
[(:+ scheme-whitespace)
|
||||
(ret lexeme 'white-space #f start-pos end-pos)]
|
||||
[(:or "#t" "#f" "#T" "#F" character keyword
|
||||
[(:or "#t" "#f" "#T" "#F" character
|
||||
(make-num digit2 radix2)
|
||||
(make-num digit8 radix8)
|
||||
(make-num digit10 (:? radix10))
|
||||
(make-num digit16 radix16))
|
||||
(ret lexeme 'constant #f start-pos end-pos)]
|
||||
[keyword (ret lexeme 'parenthesis #f start-pos end-pos)]
|
||||
[str (ret lexeme 'string #f start-pos end-pos)]
|
||||
[line-comment
|
||||
(ret lexeme 'comment #f start-pos end-pos)]
|
||||
|
|
Loading…
Reference in New Issue
Block a user