Up to Pisces Online Documentation

Geisow's Algorithm

( also known as "2D Bernstein Method" )

Overview

This algorithm traces the level set of a POLYNOMIAL function of two variables. That is, given a polynomial from R^2->R, this function computes the algebraic variety associated to that polynomial. This algorithm should NOT be used on functions that are not polynomials.

How Geisow's Algorithm Works

Geisow's algorithm traces the zero set of an arbitrary polynomial curve in a specified region of x,y space. It represents the polynomial in the Bernstein basis { choose(N,i)(1-x)^{N-i}x^i }, because the coefficients of the polynomial in that basis have the property that if ALL Bernstein coefficients have the same sign (pos or neg), then the polynomial does not have any zeros on the interval [0,1]. (The converse does not hold: there are Bernstein polynomials with coefficients of different signs that have no zeros on [0,1].)

The algorithm is therefore:

     Compute coefficients of polynomial in Bernstein form.
     Check coeffs of 2D Bernstein polynomial  
     if they all have the same sign,
        poly has no zeros ==> DONE
     else
     {
        look at first partial derivatives (as Bernstein polys)
        if they have coeffs of same sign
           poly is monotone, therefore find zero and draw soln.
        else
        {
            if we are in a small region of space, 
                draw linear approx to poly
            else
                chop 2D region into 4 subregions
                recursively generate curve for those regions
        }
    }
End result: We either
  1. draw linear approximation to level curve
  2. give up because we've reached resolution limit
  3. throw the rectangle out because no root in the rectangle

Controlling the Algorithm From Pisces

Geisow Panel Image
The Pisces panel to Geisow's algorithm has 3 parameters:

Known Bugs

Coefficients for the polynomial are determined numerically, so any coefficient that has a magnitude less than about 1.0e-8 will get truncated to 0.

The routine does not verify that the current function is a polynomial. This is because a function like x + y^2 + A*sin(x) may or may not be a polynomial, depending on whether A=0, and whether x is a variable or a parameter.

Bug Reports

software@geom.umn.edu

Algorithm Implemented by

Frederick J. Wicklin

Acknowledgements

This code is based on an algorithm developed by A. Geisow in his 1982 PhD thesis, "Surface Interrogation," University of East Anglia, (UK)

Dr. Ralph Martin (Dept of Computing Maths, University of Wales College of Cardiff, Senghennydd Rd, Cardiff, CF2 4AG, United Kingdom) kindly gave the Geometry Center code that implemented this algorithm. The code was originally written for Sun PHIGS. Many thanks to Drs. Geisow and Martin for agreeing to allow their code to be incorporated into the Geometry Center code.


[Pisces] The Pisces Home Page

[HOME] The Geometry Center Home Page

Comments to: pisces@geom.umn.edu
Created Fri May 12 15:46:19 CDT 1995 by Fredrick Wicklin
Converted to html on July 26, 1995 by Erik Streed
Last Modified: July 26, 1995
Copyright © 1995 by The Geometry Center, all rights reserved.