Esempio n. 1
0
        private void button3_Click(object sender, EventArgs e)
        {
            _Point p = new _Point(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text), Convert.ToDouble(textBox3.Text));
            _Point v = new _Point(Convert.ToDouble(textBox4.Text), Convert.ToDouble(textBox5.Text), Convert.ToDouble(textBox6.Text));

            label4.Text = VectMath.RotateByAngle(p, v, Convert.ToDouble(textBox7.Text)).x.ToString() + ", " + VectMath.RotateByAngle(p, v, Convert.ToDouble(textBox7.Text)).y.ToString() + ", " + VectMath.RotateByAngle(p, v, Convert.ToDouble(textBox7.Text)).z.ToString();
        }
Esempio n. 2
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            frame += 1;
            graphics.Clear(Color.White);
            //Sphere.Rotate(new _Point(0, 1, 0), 5);
            //Sphere.SetPosition(VectMath.Add(Sphere.Position, VectMath.Scale(new _Point(0, 1, 0), .02*Math.Sin(frame*.1))));
            //DrawMesh(Sphere);
            Cubes[0].Rotate(Axes.Y, 6);
            Cubes[1].Rotate(Axes.X, 6);
            Cubes[2].Rotate(Axes.Z, 6);


            foreach (Mesh cube in Cubes)
            {
                if (cube.Position.z > 1)
                {
                    cube.SetPosition(VectMath.Add(cube.Position, new _Point(0, 0, -.1 * Math.Sqrt(Math.Pow(cube.Position.x, 2) + Math.Pow(cube.Position.y, 2)))));
                }
                else
                {
                    cube.SetPosition(new _Point(8 * Globals.rnd.NextDouble() - 4, 8 * Globals.rnd.NextDouble() - 4, 15));
                }
                DrawMesh(cube);
            }
        }
Esempio n. 3
0
    public _Point ForceOn(Particle particle, Particle p)
    {
        _Point vector   = VectMath.Subtract(p.Position, particle.Position);    //Vector pointing from particle to p
        double distance = VectMath.Magnitude(vector);

        if (distance > ParticleRadius & distance < AttractionRadius)
        {
            return(VectMath.Scale(vector, (1 / distance)));
        }
        else
        {
            if (distance < ParticleRadius)
            {
                if (distance == 0)
                {
                    return(new _Point(0, 0, 0));
                }
                else
                {
                    return(VectMath.Scale(vector, (-1 / distance)));
                }
            }
            else
            {
                return(new _Point(0, 0, 0));
            }
        }
    }
Esempio n. 4
0
 public void Rotate(_Point axis, double deg)
 {
     for (int i = 0; i < Points.Count; i++)
     {
         Points[i] = VectMath.Add(VectMath.RotateByAngle(VectMath.Subtract(Points[i], Position), axis, deg), Position);
     }
     Normal = CalculateNormal();
 }
Esempio n. 5
0
    public void SetPosition(_Point p)
    {
        _Point MoveVector = VectMath.Subtract(p, Position);

        foreach (Plane plane in Planes)
        {
            plane.SetPosition(VectMath.Add(plane.Position, MoveVector));
        }
        Position = p;
    }
Esempio n. 6
0
    public Brush PerceivedColor(LightSource light, _Point CamPosition)
    {
        _Point     LightVector = VectMath.Subtract(this.Position, light.Position);
        _Point     PercVector  = this.Position;
        _Point     Rvector     = VectMath.RotateByAngle(VectMath.Negate(LightVector), Normal, 180);
        double     whitefactor = Math.Abs(.5 * Math.Sin(VectMath.AngleBetween(Normal, LightVector)) + .5);
        double     colorfactor = Math.Abs(Math.Cos(VectMath.AngleBetween(Normal, LightVector)));
        double     Total       = Math.Pow(Math.Sin(VectMath.AngleBetween(PercVector, Rvector)), 2);
        SolidBrush brush       = new SolidBrush(Color.FromArgb(Convert.ToInt32(255 * Total * colorfactor * whitefactor), Convert.ToInt32(255 * Total * whitefactor), Convert.ToInt32(255 * Total * whitefactor)));

        return(brush);
    }
Esempio n. 7
0
    public void SetPosition(_Point p)
    {
        //IO.Point(Position);
        _Point DiffVector = VectMath.Subtract(p, Position);

        for (int i = 0; i < Points.Count; i++)
        {
            Points[i] = VectMath.Add(Points[i], DiffVector);
        }
        Position = p;
        Normal   = CalculateNormal();
    }
Esempio n. 8
0
 public void Rotate(_Point axis, double angle)
 {
     foreach (Plane plane in Planes)
     {
         for (int i = 0; i < plane.Points.Count; i++)
         {
             _Point p = plane.Points[i];
             //IO.Point(p);
             plane.Points[i] = VectMath.Add(VectMath.RotateByAngle(VectMath.Subtract(p, this.Position), axis, angle), this.Position);
             //IO.Point(plane.Points[i]);
         }
         plane.Position = VectMath.CenterofPoints(plane.Points);
         plane.Normal   = plane.CalculateNormal();
     }
 }
Esempio n. 9
0
    public static _Point RotateByAngle(_Point pnt, _Point Axis, double Angle)
    {
        if (VectMath.IsParallel(pnt, Axis) == true)
        {
            return(pnt);
        }
        Angle = (Angle * Math.PI) / 180;
        _Point Avector     = VectMath.Subtract(pnt, VectMath.Project(pnt, Axis));
        double MagAvector  = VectMath.Magnitude(Avector);
        _Point V1          = VectMath.Unit(VectMath.Cross(Axis, Avector));
        _Point V2          = (VectMath.Negate(Avector));
        _Point TransVector = VectMath.Add(VectMath.Scale(V1, MagAvector * Math.Sin(Angle)), VectMath.Scale(V2, (-1 * Math.Cos(Angle) + 1)));

        return(VectMath.Add(TransVector, pnt));
    }
Esempio n. 10
0
 public void Iterrate()
 {
     foreach (Particle particle in Particles)
     {
         particle.force = new _Point(0, 0, 0);
         foreach (Particle p in Particles)
         {
             particle.force = VectMath.Add(ForceOn(particle, p), particle.force);
         }
         particle.velocity = VectMath.Add(particle.velocity, (VectMath.Scale(VectMath.Scale(particle.force, 1 / particle.Mass), TimeInterval)));
         //MessageBox.Show(VectMath.Magnitude(particle.force).ToString());
     }
     foreach (Particle particle in Particles)
     {
         particle.Position = VectMath.Add(particle.Position, VectMath.Scale(particle.velocity, TimeInterval));
     }
 }
Esempio n. 11
0
        public void DrawPlane(Plane plane)
        {
            if (VectMath.AngleBetween(VectMath.Subtract(plane.Position, new _Point(0, 0, 0)), plane.Normal) > Math.PI / 2)
            {
                PointF[] pf = new PointF[plane.Points.Count];

                for (int i = 0; i < pf.Length; i++)
                {
                    Point p = convert2D(plane.Points[i]);
                    pf[i] = new PointF(p.X, p.Y);
                }
                graphics.FillPolygon(plane.PerceivedColor(Sun, new _Point(0, 0, 0)), pf);
                pictureBox1.Image = bm;
                // Globals.PlanePointsToClear.Add(pf);
            }
            // MessageBox.Show(VectMath.AngleBetween(VectMath.Subtract(plane.Position, new _Point(0, 0, 0)), plane.Normal).ToString());
        }
Esempio n. 12
0
        public Point convert2D(_Point p)
        {
            if (Camera1.NormalAxis != Axes.Z)
            {
                //IO.Point(p);
                p = VectMath.RotateByAngle(p, VectMath.Cross(Axes.Z, Camera1.NormalAxis), 180 * (VectMath.AngleBetween(new _Point(0, 0, 1), Camera1.NormalAxis)) / Math.PI);
                //IO.Point(p);
            }
            //if( Camera1.VerticalAxis != Axes.Y)
            // {
            //     p = VectMath.RotateByAngle(p, Camera1.NormalAxis, 180*(VectMath.AngleBetween(new _Point(0, 1, 0), Camera1.VerticalAxis))/Math.PI);
            // }
            if (p.z <= 0)
            {
                return(new Point(0, 0));
            }
            int Xcoord = Convert.ToInt32((p.x * Globals.BMSize.Width / 2) / (p.z * Math.Tan(45))) + Globals.BMSize.Width / 2;
            int Ycoord = Convert.ToInt32((-p.y * Globals.BMSize.Height / 2) / (p.z * Math.Tan(45))) + Globals.BMSize.Height / 2;

            p.PF = new PointF(Xcoord, Ycoord);

            return(new Point(Xcoord, Ycoord));
        }
Esempio n. 13
0
 public void Rotate(_Point Axis, double Angle)
 {
     NormalAxis   = VectMath.RotateByAngle(NormalAxis, Axis, Angle);
     VerticalAxis = VectMath.RotateByAngle(VerticalAxis, Axis, Angle);
 }
Esempio n. 14
0
 public static _Point Unit(_Point a)
 {
     return(VectMath.Scale(a, 1 / VectMath.Magnitude(a)));
 }
Esempio n. 15
0
 public static double AngleBetween(_Point a, _Point b)
 {
     return(Math.Acos((VectMath.Dot(a, b)) / (VectMath.Magnitude(a) * VectMath.Magnitude(b))));
 }
Esempio n. 16
0
 public static _Point Project(_Point a, _Point b)
 {
     return(VectMath.Scale(b, (VectMath.Dot(a, b) / (VectMath.SqrMagnitude(b)))));
 }
Esempio n. 17
0
 public void Move(_Point point)
 {
     SetPosition(VectMath.Add(Position, point));
 }
Esempio n. 18
0
 public Plane(List <_Point> Points)
 {
     this.Points = Points;
     Position    = VectMath.CenterofPoints(Points);
     Normal      = CalculateNormal();
 }
Esempio n. 19
0
 public _Point CalculateNormal()
 {
     return(VectMath.Cross(VectMath.Subtract(Points[1], Points[0]), VectMath.Subtract(Points[2], Points[0])));
 }