Brian Martin
This section explains the steps necessary to create simplified functions for
each quaternion element of a quaternion function. Operators are assumed to be
elements of the set
,
with increasing precedence.
Operands are assumed to be operators, literal or variable quaternions, or literal
scalars.
For each scalar quaternion element
we will generate a scalar function
from
.
To do this we need to process
under context
.
Let
denote processing expression x under
context e. Then
.
Using the following formulations derived from quaternion algebra, we can express
as a function of smaller subproblems for any expression
x and context c.
To avoid recalculating any of the results it's best to store the intermediate
values in a table. The rows of this table will be indexed by a context
.
The columns will be indexed by expressions. Each entry in the table will hold
the result of evaulationg the given expression under the given context. The
first column index will be the function
that we are
using for evaluation. The entires in this column will be computed based upon
values from successive columns, given the rules listed above. We can recursively
generate these indicies. If for each entry in the table we store the indicies
of the columns that it depends on, and also the rule by which the problem was
decomposed at that point, then we can then fill out every entry in the table
given some quaternion point q.
We can factor the table generation out of the divergence testing loop if we
generate it at the time the divergence function is processed. Table generation
will consist of determining the proper column indicies and saving the required
state to process points. The first column in the table will be the divergence
function f. This column will eventually contain the quaternion that results
from evaluating the function at some given point. The other column indicies
can be deduced recursively by applying the rules for
above. Then for each table entry:
Evaluating points with the table is easy. If the column index of the dependent variable (q here) is stored when the table is generated, then the function can be applied by writing the desired value of q into the table at that spot, and then filling in all unused entries in the table. Since each entry will only depend upon values to the right of it in the table, filling out columns from the left will work. The result of the function will then be in the first column of the table.
In this section I will attempt to show how DP can be used in conjunction with the ^ operator to make things a lot faster.
I will attempt to derive
for
,
where
.
This document was generated using the LaTeX2HTML translator Version 98.1p1 release (March 2nd, 1998)
Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
The command line arguments were:
latex2html -antialias_text -antialias -split 0 -no_navigation diverg.tex.
The translation was initiated by brian martin on 1998-07-22