diff --git a/DroneSimulator/Drone.cs b/DroneSimulator/Drone.cs index 0b49f28..6c8e7fd 100644 --- a/DroneSimulator/Drone.cs +++ b/DroneSimulator/Drone.cs @@ -202,8 +202,8 @@ namespace DroneSimulator float spd_x = spd.X - SpdXYZ.X; float spd_y = spd.Y - SpdXYZ.Y; - wind_x = 0.5f * Area.Wind.Density * Area.Wind.Resist * spd_x; - wind_y = 0.5f * Area.Wind.Density * Area.Wind.Resist * spd_y; + wind_x = 0.5f * Area.Wind.Density * Area.Wind.Resist * (spd_x * MathF.Abs(spd_x)); + wind_y = 0.5f * Area.Wind.Density * Area.Wind.Resist * (spd_y * MathF.Abs(spd_y)); } Quaternion pow = Quaternion.Inverse(Quat) * new Quaternion(0, 0, flow, 0) * Quat; diff --git a/DroneSimulator/FormMain.Designer.cs b/DroneSimulator/FormMain.Designer.cs index 1647a07..b2d86f6 100644 --- a/DroneSimulator/FormMain.Designer.cs +++ b/DroneSimulator/FormMain.Designer.cs @@ -1654,12 +1654,13 @@ // numericUpDown_Area_Wind_Resist // numericUpDown_Area_Wind_Resist.DecimalPlaces = 3; + numericUpDown_Area_Wind_Resist.Increment = new decimal(new int[] { 1, 0, 0, 131072 }); numericUpDown_Area_Wind_Resist.Location = new Point(63, 116); - numericUpDown_Area_Wind_Resist.Maximum = new decimal(new int[] { 10, 0, 0, 0 }); + numericUpDown_Area_Wind_Resist.Maximum = new decimal(new int[] { 1, 0, 0, 0 }); numericUpDown_Area_Wind_Resist.Name = "numericUpDown_Area_Wind_Resist"; numericUpDown_Area_Wind_Resist.Size = new Size(60, 23); numericUpDown_Area_Wind_Resist.TabIndex = 13; - numericUpDown_Area_Wind_Resist.Value = new decimal(new int[] { 1, 0, 0, 65536 }); + numericUpDown_Area_Wind_Resist.Value = new decimal(new int[] { 1, 0, 0, 131072 }); numericUpDown_Area_Wind_Resist.ValueChanged += numericUpDown_Area_Wind_Update; // // label64 diff --git a/DroneSimulator/Screen2D.cs b/DroneSimulator/Screen2D.cs index c967b1c..d7e7295 100644 --- a/DroneSimulator/Screen2D.cs +++ b/DroneSimulator/Screen2D.cs @@ -106,51 +106,55 @@ namespace DroneSimulator foreach (var d in DroneList) { - if (d.Azimuth >= 360) d.Azimuth -= 360; - var bmp = RotateImage(d.Drone, d.Azimuth); - - g.FillEllipse(new SolidBrush(Color.FromArgb(50, d.RGB)), d.PosXY.X + d.Height, d.PosXY.Y + d.Height, 130, 130); - - g.DrawLine(new Pen(Color.Black), new Point(d.PosXY.X + d.Drone.Width / 2, d.PosXY.Y + d.Drone.Height / 2), new Point(d.PosXY.X + d.Height + d.Drone.Width / 2, d.PosXY.Y + d.Height + d.Drone.Height / 2)); - - //g.DrawImage(bmp, new Rectangle(d.PosXY.X+32, d.PosXY.Y, 65, 130)); - - float x1 = 0, y1 = 0; - float x2 = 130, y2 = 0; - float x3 = 0, y3 = 130; - - const float TO_RADI = MathF.PI / 180; - - Quaternion tilt = new Quaternion(d.TiltXY.X, d.TiltXY.Y, 0, 0); - Quaternion rotate = Quaternion.CreateFromAxisAngle(new Vector3(0, 0, 1), d.Azimuth * TO_RADI); - - tilt = tilt * rotate * rotate; - - if (tilt.Y > 0) + try { - x1 = (int)(Math.Sin(tilt.Y) * 130); - x3 = (int)(Math.Sin(tilt.Y) * 130); - } - else - { - x2 = (int)(Math.Cos(tilt.Y) * 130); - } + if (d.Azimuth >= 360) d.Azimuth -= 360; + var bmp = RotateImage(d.Drone, d.Azimuth); - if (tilt.X > 0) - { - y1 = (int)(Math.Sin(tilt.X) * 130); - y2 = (int)(Math.Sin(tilt.X) * 130); - } - else - { - y3 = (int)(Math.Cos(tilt.X) * 130); - } + g.FillEllipse(new SolidBrush(Color.FromArgb(50, d.RGB)), d.PosXY.X + d.Height, d.PosXY.Y + d.Height, 130, 130); - PointF ul = new PointF(d.PosXY.X + x1, d.PosXY.Y + y1); PointF ur = new PointF(d.PosXY.X + x2, d.PosXY.Y + y2); - PointF dl = new PointF(d.PosXY.X + x3, d.PosXY.Y + y3); - PointF[] dest = { ul, ur, dl }; + g.DrawLine(new Pen(Color.Black), new Point(d.PosXY.X + d.Drone.Width / 2, d.PosXY.Y + d.Drone.Height / 2), new Point(d.PosXY.X + d.Height + d.Drone.Width / 2, d.PosXY.Y + d.Height + d.Drone.Height / 2)); - g.DrawImage(bmp, dest); + //g.DrawImage(bmp, new Rectangle(d.PosXY.X+32, d.PosXY.Y, 65, 130)); + + float x1 = 0, y1 = 0; + float x2 = 130, y2 = 0; + float x3 = 0, y3 = 130; + + const float TO_RADI = MathF.PI / 180; + + Quaternion tilt = new Quaternion(d.TiltXY.X, d.TiltXY.Y, 0, 0); + Quaternion rotate = Quaternion.CreateFromAxisAngle(new Vector3(0, 0, 1), d.Azimuth * TO_RADI); + + tilt = tilt * rotate * rotate; + + if (tilt.Y > 0) + { + x1 = (int)(Math.Sin(tilt.Y) * 130); + x3 = (int)(Math.Sin(tilt.Y) * 130); + } + else + { + x2 = (int)(Math.Cos(tilt.Y) * 130); + } + + if (tilt.X > 0) + { + y1 = (int)(Math.Sin(tilt.X) * 130); + y2 = (int)(Math.Sin(tilt.X) * 130); + } + else + { + y3 = (int)(Math.Cos(tilt.X) * 130); + } + + PointF ul = new PointF(d.PosXY.X + x1, d.PosXY.Y + y1); PointF ur = new PointF(d.PosXY.X + x2, d.PosXY.Y + y2); + PointF dl = new PointF(d.PosXY.X + x3, d.PosXY.Y + y3); + PointF[] dest = { ul, ur, dl }; + + g.DrawImage(bmp, dest); + } + catch { } } }