package notrobust;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.vecmath.Point2d;
import utils.FrameDumper;

/**
 *
 * @author twak
 */
public class Orientation extends JPanel
{

    public int calculate (Point2d p, Point2d q, Point2d r, double ep )
    {
        double res = (q.x - p.x) * (r.y - p.y ) - (q.y - p.y) * (r.x - p.x );
        return res > ep ? 1 : res < -ep ? -1 : 0;
    }

    public int calculate (int x, int y, double ep)
    {
        Point2d p = new Point2d( 0.5, 0.5 );
        Point2d q = new Point2d( 12, 12 );
        Point2d r = new Point2d( 24, 24 );

//        p.x +=  Math.pow( 2, -53) * x;
//        p.y +=  Math.pow( 2, -53) * y;

        for (int x2 = 0; x2 < x; x2++)
        {
            p.x += Math.ulp( p.x );
        }

        for (int y2 = 0; y2 < y; y2++)
        {
            p.y += Math.ulp( p.y );
        }

        return calculate (p,q,r, ep);
    }

    @Override
    public void paint( Graphics g )
    {
        paint( g, getWidth(), getHeight(), 0);
    }
    public void paint( Graphics g, int w, int h, double ep )
    {
        for (int x = 0; x < w; x++ )
            for ( int y = 0; y < h; y++ )
            {
                int res = calculate( x, y, ep );
                g.setColor( res == -1 ? Color.blue : res == 0 ? Color.yellow : Color.red );
                g.fillRect( x, y, 1, 1 );
            }
    }

    public void go()
    {
        double ep = 0;
        
        for ( int i = 0; i < 150; i++ )
        {
            Graphics g = FrameDumper.dumpFrame( 1024, 1024 );
            paint( g, 1024, 1024, ep );
            ep += Math.pow( 2, -44);
            System.out.println("working on "+i+" with epsilon "+ep);
        }
    }

    public static void main (String[] args)
    {
        new Orientation().go();

//        JFrame frame= new JFrame("robust...?");
//        JPanel p = new JPanel();
//        p.setLayout( new GridLayout () );
//
//        p.add( new Orientation() );
//
//        frame.setContentPane( p );
//
//        frame.setSize(300,300);
//
//        frame.setVisible( true );
    }
}

Add a code snippet to your website: www.paste.org