コード例 #1
0
 public Cube(Polyhedron p)
 {
     ph             = p.Clone() as Polyhedron;
     outside_sphere = new Sphere(ph);
     squares.Clear();
     foreach (var face in ph.Verges)
     {
         double s   = 0;
         int    cnt = face.Edges.Count();
         for (int i = 1; i < cnt - 1; ++i)
         {
             s += triangle_square(face.Edges[0].First, face.Edges[i].First, face.Edges[i + 1].First);
         }
         squares.Add(face, s);
     }
 }
コード例 #2
0
        public Sphere(Polyhedron ph)
        {
            var p    = ph.Verges[0].Edges[0].First;
            var dist = new Vector(ph.Center, p).Norm();

            foreach (var f in ph.Verges)
            {
                foreach (var e in f.Edges)
                {
                    var pp    = e.First;
                    var ddist = new Vector(ph.Center, pp).Norm();
                    if (ddist > dist)
                    {
                        dist = ddist;
                        p    = pp;
                    }
                }
            }

            this.center = ph.Center;
            this.radius = dist;
        }
コード例 #3
0
        private void Init()
        {
            Models.Clear();
            colors.Clear();
            diffuse.Clear();
            reflect.Clear();
            trans.Clear();
            refract.Clear();

            // Сферы
            Models.Add(new Sphere(new XYZPoint(-2, 1, -2.5), 1));
            colors.Add(Models.Last(), Color.White);
            diffuse.Add(Models.Last(), 0.8);
            reflect.Add(Models.Last(), 0.2);
            trans.Add(Models.Last(), 0);
            refract.Add(Models.Last(), 1.5);

            Models.Add(new Sphere(new XYZPoint(2, 1, -2.5), 0.5));
            colors.Add(Models.Last(), Color.White);
            diffuse.Add(Models.Last(), 0.3);
            reflect.Add(Models.Last(), 0.7);
            trans.Add(Models.Last(), 0);
            refract.Add(Models.Last(), 1.5);

            // Кубы
            Models.Add(new Cube(Polyhedron.CreateHexahedron(
                                    new XYZPoint(-3, -3, -5),
                                    new XYZPoint(-2, -3, -5),
                                    new XYZPoint(-3, -2, -5))));
            colors.Add(Models.Last(), Color.Black);
            diffuse.Add(Models.Last(), 0.8);
            reflect.Add(Models.Last(), 0.2);
            trans.Add(Models.Last(), 0);
            refract.Add(Models.Last(), 1.5);

            Models.Add(new Cube(Polyhedron.CreateHexahedron(
                                    new XYZPoint(-1.5, -4, -5),
                                    new XYZPoint(0, -4, -5),
                                    new XYZPoint(-1.5, -2.5, -5))));
            colors.Add(Models.Last(), Color.Blue);
            diffuse.Add(Models.Last(), 0.1);
            reflect.Add(Models.Last(), 0);
            trans.Add(Models.Last(), 0.5);
            refract.Add(Models.Last(), 1);

            // Правая стена
            Models.Add(new Wall(
                           new XYZPoint(-5, -5, -5),
                           new XYZPoint(-5, -5, 5),
                           new XYZPoint(-5, 5, 5),
                           new XYZPoint(-5, 5, -5)));
            colors.Add(Models.Last(), Color.LawnGreen);
            diffuse.Add(Models.Last(), 1);
            reflect.Add(Models.Last(), 0);
            trans.Add(Models.Last(), 0);
            refract.Add(Models.Last(), 1);

            // Левая стена
            Models.Add(new Wall(
                           new XYZPoint(5, 5, -5),
                           new XYZPoint(5, 5, 5),
                           new XYZPoint(5, -5, 5),
                           new XYZPoint(5, -5, -5)));
            colors.Add(Models.Last(), Color.Crimson);
            diffuse.Add(Models.Last(), 0);
            reflect.Add(Models.Last(), 1);
            trans.Add(Models.Last(), 0);
            refract.Add(Models.Last(), 1);

            // Передняя стена
            Models.Add(new Wall(
                           new XYZPoint(5, -5, -5),
                           new XYZPoint(5, -5, 5),
                           new XYZPoint(-5, -5, 5),
                           new XYZPoint(-5, -5, -5)));
            colors.Add(Models.Last(), Color.Azure);
            diffuse.Add(Models.Last(), 0.5);
            reflect.Add(Models.Last(), 0.5);
            trans.Add(Models.Last(), 0);
            refract.Add(Models.Last(), 1);


            // Пол
            Models.Add(new Wall(
                           new XYZPoint(-5, -5, -5),
                           new XYZPoint(5, -5, -5),
                           new XYZPoint(5, 5, -5),
                           new XYZPoint(-5, 5, -5)));
            colors.Add(Models.Last(), Color.White);
            diffuse.Add(Models.Last(), 0.8);
            reflect.Add(Models.Last(), 0.2);
            trans.Add(Models.Last(), 0);
            refract.Add(Models.Last(), 1);



            lights.Clear();
            lights_power.Clear();

            lights.Add(new XYZPoint(-4.9, -4.9, -4.9));
            lights_power.Add(lights.Last(), 1);

            lights.Add(new XYZPoint(0, -4.9, 0));
            lights_power.Add(lights.Last(), 1);
        }