package jembench.parallel.raytrace; import java.util.Vector; public class Sphere{ double radius;//radius double[]position; int[]rgb; double reflection; public Sphere(){ position= new double[]{0,0,0}; radius = 1; rgb=new int[]{1,2,3}; } public Sphere(double aPositionX, double aPositionY, double aPositionZ, double aRadius){ position = new double[]{aPositionX,aPositionY,aPositionZ}; radius = aRadius; rgb=new int[]{1,2,3}; } public Sphere(double aPositionX, double aPositionY, double aPositionZ, double aRadius, int red, int green, int blue, double ref){ position = new double[]{aPositionX,aPositionY,aPositionZ}; radius = aRadius; rgb = new int[]{red,green,blue}; reflection = ref; } /** * Erzeugt eine Zuf�llige Szene, gef�llt mit Kugeln. * * @param spheres_num Anzahl von Kugeln * @param spheres_maxsize Maximale Gr��e einer Kugel * @param dist2zero Maximale Entfernung zum Koordinatenursprung * @return generierte Szene */ /* public static Vector createRandomSpheres(int spheres_num, double spheres_maxsize, double dist2zero){ Vector result = new Vector(0); double rx, ry, rz, rs; int colr, colg, colb; Random r = new Random(); for(int i=0; i<spheres_num; i++){ rx = (r.nextDouble()-r.nextDouble())*dist2zero; ry = (r.nextDouble()-r.nextDouble())*dist2zero; rz = (r.nextDouble()-r.nextDouble())*dist2zero; rs = (r.nextDouble())*spheres_maxsize; colr = r.nextInt(256); colg = r.nextInt(256); colb = r.nextInt(256); Sphere s = new Sphere(rx,ry,rz,rs,colr,colg,colb,0.95); result.addElement(s); } return result; }*/ public static Vector createSpheres(){ Vector result = new Vector(0); result.addElement(new Sphere(0.872F,2.926F,-3.470F, 0.443F, 60,207,204, 0.95F)); result.addElement(new Sphere(-1.241F,1.113F,1.065F, 0.179F, 193,206,122, 0.95F)); /*result.addElement(new Sphere(3.683F,-2.218F,1.519F, 1.537F, 225,247,98, 0.95F)); result.addElement(new Sphere(-1.760F,4.712F,-0.842F, 0.786F, 127,231,43, 0.95F)); result.addElement(new Sphere(-0.253F,2.966F,-1.498F, 0.409F, 72,172,85, 0.95F)); */ return result; } public double[] reflect(double[]intersection, double[]rayDir){ double[] result = new double[3]; double[] normal = new double[3]; MyVector.to(normal, position, intersection); MyVector.normalize(normal, normal); MyVector.scale(result, rayDir, -1);//Richtung �ndern MyVector.rotate(result, result, normal, 180);//Um die Normale drehen return result; } }