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(); }
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); } }
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)); } } }
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(); }
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; }
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); }
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(); }
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(); } }
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)); }
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)); } }
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()); }
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)); }
public void Rotate(_Point Axis, double Angle) { NormalAxis = VectMath.RotateByAngle(NormalAxis, Axis, Angle); VerticalAxis = VectMath.RotateByAngle(VerticalAxis, Axis, Angle); }
public static _Point Unit(_Point a) { return(VectMath.Scale(a, 1 / VectMath.Magnitude(a))); }
public static double AngleBetween(_Point a, _Point b) { return(Math.Acos((VectMath.Dot(a, b)) / (VectMath.Magnitude(a) * VectMath.Magnitude(b)))); }
public static _Point Project(_Point a, _Point b) { return(VectMath.Scale(b, (VectMath.Dot(a, b) / (VectMath.SqrMagnitude(b))))); }
public void Move(_Point point) { SetPosition(VectMath.Add(Position, point)); }
public Plane(List <_Point> Points) { this.Points = Points; Position = VectMath.CenterofPoints(Points); Normal = CalculateNormal(); }
public _Point CalculateNormal() { return(VectMath.Cross(VectMath.Subtract(Points[1], Points[0]), VectMath.Subtract(Points[2], Points[0]))); }