The answer, with full Java code is located on StackOverflow [here](http://stackoverflow.com/questions/6972331/how-can-i-generate-as-set-of-uniform-points-around-an-ellipse)

Answered by:
-------
edited Dec 11 '13 at 4:14
John Paul

answered Dec 11 '13 at 3:48
Dave

    package com.math;

    public class CalculatePoints {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        /*
         * 
        dp(t) = sqrt( (r1*sin(t))^2 + (r2*cos(t))^2)
        circ = sum(dp(t), t=0..2*Pi step 0.0001)

        n = 20

        nextPoint = 0
        run = 0.0
        for t=0..2*Pi step 0.0001
            if n*run/circ >= nextPoint then
                set point (r1*cos(t), r2*sin(t))
                nextPoint = nextPoint + 1
            next
            run = run + dp(t)
        next
     */


        double r1 = 20.0;
        double r2 = 10.0;

        double theta = 0.0;
        double twoPi = Math.PI*2.0;
        double deltaTheta = 0.0001;
        double numIntegrals = Math.round(twoPi/deltaTheta);
        double circ=0.0;
        double dpt=0.0;

        /* integrate over the elipse to get the circumference */
        for( int i=0; i < numIntegrals; i++ ) {
            theta += i*deltaTheta;
            dpt = computeDpt( r1, r2, theta);
            circ += dpt;
        }
        System.out.println( "circumference = " + circ );

        int n=20;
        int nextPoint = 0;
        double run = 0.0;
        theta = 0.0;

        for( int i=0; i < numIntegrals; i++ ) {
            theta += deltaTheta;
            double subIntegral = n*run/circ;
            if( (int) subIntegral >= nextPoint ) {
                double x = r1 * Math.cos(theta);
                double y = r2 * Math.sin(theta);
                System.out.println( "x=" + Math.round(x) + ", y=" + Math.round(y));
                nextPoint++;
            }
            run += computeDpt(r1, r2, theta);
        }
    }

    static double computeDpt( double r1, double r2, double theta ) {
        double dp=0.0;

        double dpt_sin = Math.pow(r1*Math.sin(theta), 2.0);
        double dpt_cos = Math.pow( r2*Math.cos(theta), 2.0);
        dp = Math.sqrt(dpt_sin + dpt_cos);

        return dp;
    }

    }