diff --git a/DroneClient/FormMain.Designer.cs b/DroneClient/FormMain.Designer.cs index a742c94..4604a5d 100644 --- a/DroneClient/FormMain.Designer.cs +++ b/DroneClient/FormMain.Designer.cs @@ -74,6 +74,8 @@ label17 = new Label(); label_OF_X = new Label(); label19 = new Label(); + trackBar_Value = new TrackBar(); + label4 = new Label(); groupBox1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)numericUpDown_Server_Port).BeginInit(); groupBox2.SuspendLayout(); @@ -81,6 +83,7 @@ groupBox4.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)trackBar_Power).BeginInit(); groupBox5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)trackBar_Value).BeginInit(); SuspendLayout(); // // timer_Test @@ -536,11 +539,33 @@ label19.TabIndex = 4; label19.Text = "X:"; // + // trackBar_Value + // + trackBar_Value.Location = new Point(349, 240); + trackBar_Value.Maximum = 100; + trackBar_Value.Minimum = 1; + trackBar_Value.Name = "trackBar_Value"; + trackBar_Value.Orientation = Orientation.Vertical; + trackBar_Value.Size = new Size(45, 195); + trackBar_Value.TabIndex = 25; + trackBar_Value.Value = 1; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(347, 219); + label4.Name = "label4"; + label4.Size = new Size(47, 15); + label4.TabIndex = 26; + label4.Text = "POWER"; + // // Form_Main // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(446, 447); + Controls.Add(label4); + Controls.Add(trackBar_Value); Controls.Add(groupBox5); Controls.Add(button_MR); Controls.Add(button_ML); @@ -570,6 +595,7 @@ ((System.ComponentModel.ISupportInitialize)trackBar_Power).EndInit(); groupBox5.ResumeLayout(false); groupBox5.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)trackBar_Value).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -621,5 +647,6 @@ private Label label17; private Label label_OF_X; private Label label19; + private TrackBar trackBar_Value; } } diff --git a/DroneClient/FormMain.cs b/DroneClient/FormMain.cs index 5d16e3d..f33d230 100644 --- a/DroneClient/FormMain.cs +++ b/DroneClient/FormMain.cs @@ -128,7 +128,7 @@ namespace DroneSimulator private void button_UU_MouseDown(object sender, MouseEventArgs e) { - const float pow = 0.1f; + float pow = ((float)trackBar_Value.Value) / 10.0f; if (sender == button_UU) { diff --git a/DroneSimulator/Area.cs b/DroneSimulator/Area.cs index 3dcd513..97dac76 100644 --- a/DroneSimulator/Area.cs +++ b/DroneSimulator/Area.cs @@ -20,7 +20,8 @@ namespace DroneSimulator public struct Speed { public static float From, To; } public static float Direction; public static float Density; - public static float Resist; + public static float PosResist; + public static float RotResist; } } } diff --git a/DroneSimulator/Drone.cs b/DroneSimulator/Drone.cs index 061c070..5418f2a 100644 --- a/DroneSimulator/Drone.cs +++ b/DroneSimulator/Drone.cs @@ -199,27 +199,34 @@ namespace DroneSimulator flow += flow * 0.1f; // Воздушная подушка } - SpdPRY += AccPRY * (Dynamic * time / (Mass * Length)); + float wind_x = 0, wind_y = 0, wind_z = 0; + float wind_p = 0, wind_r = 0, wind_w = 0; if (Area.Wind.Enable) { Quaternion dir = Quaternion.CreateFromAxisAngle(new Vector3(0, 0, 1), Area.Wind.Direction * TO_RADI * 2); - //Quaternion win = new Quaternion(0, 1, 0, 0) * dir; - Quaternion spd = new Quaternion(0, Area.Wind.Speed.From, 0, 0) * dir; float spd_x = spd.X - SpdXYZ.X; float spd_y = spd.Y - SpdXYZ.Y; float spd_z = spd.Z - SpdXYZ.Z; - 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)); - wind_z = 0.5f * Area.Wind.Density * Area.Wind.Resist * (spd_z * MathF.Abs(spd_z)); + wind_x = 0.5f * Area.Wind.Density * Area.Wind.PosResist * (spd_x * MathF.Abs(spd_x)); + wind_y = 0.5f * Area.Wind.Density * Area.Wind.PosResist * (spd_y * MathF.Abs(spd_y)); + wind_z = 0.5f * Area.Wind.Density * Area.Wind.PosResist * (spd_z * MathF.Abs(spd_z)); + + wind_p = 0.5f * Area.Wind.Density * Area.Wind.RotResist * (SpdPRY.X * MathF.Abs(SpdPRY.X)); + wind_r = 0.5f * Area.Wind.Density * Area.Wind.RotResist * (SpdPRY.Y * MathF.Abs(SpdPRY.Y)); + wind_w = 0.5f * Area.Wind.Density * Area.Wind.RotResist * (SpdPRY.Z * MathF.Abs(SpdPRY.Z)); + + AccPRY.X -= wind_p; AccPRY.Y -= wind_r; AccPRY.Z -= wind_w; } + SpdPRY += AccPRY * (Dynamic * time / (Mass * Length)); + Quaternion pow = Quaternion.Inverse(Quat) * new Quaternion(0, 0, flow, 0) * Quat; AccXYZ = new Vector3(pow.X + wind_x, pow.Y + wind_y, pow.Z + wind_z) * (Gravity / Mass); SpdXYZ += (AccXYZ + new Vector3(0, 0, -Gravity)) * time; diff --git a/DroneSimulator/FormMain.Designer.cs b/DroneSimulator/FormMain.Designer.cs index b2d86f6..aa7351c 100644 --- a/DroneSimulator/FormMain.Designer.cs +++ b/DroneSimulator/FormMain.Designer.cs @@ -155,7 +155,9 @@ radioButton_Real = new RadioButton(); tabPage_Area = new TabPage(); groupBox4 = new GroupBox(); - numericUpDown_Area_Wind_Resist = new NumericUpDown(); + numericUpDown_Area_Wind_RotResist = new NumericUpDown(); + label65 = new Label(); + numericUpDown_Area_Wind_PosResist = new NumericUpDown(); label64 = new Label(); label63 = new Label(); numericUpDown_Area_Wind_Density = new NumericUpDown(); @@ -234,7 +236,8 @@ groupBox2.SuspendLayout(); tabPage_Area.SuspendLayout(); groupBox4.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Resist).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_RotResist).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_PosResist).BeginInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Density).BeginInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Speed_To).BeginInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Direction).BeginInit(); @@ -1629,7 +1632,9 @@ // // groupBox4 // - groupBox4.Controls.Add(numericUpDown_Area_Wind_Resist); + groupBox4.Controls.Add(numericUpDown_Area_Wind_RotResist); + groupBox4.Controls.Add(label65); + groupBox4.Controls.Add(numericUpDown_Area_Wind_PosResist); groupBox4.Controls.Add(label64); groupBox4.Controls.Add(label63); groupBox4.Controls.Add(numericUpDown_Area_Wind_Density); @@ -1646,31 +1651,51 @@ groupBox4.Dock = DockStyle.Top; groupBox4.Location = new Point(0, 53); groupBox4.Name = "groupBox4"; - groupBox4.Size = new Size(210, 150); + groupBox4.Size = new Size(210, 177); groupBox4.TabIndex = 1; groupBox4.TabStop = false; groupBox4.Text = "Air and Wind"; // - // numericUpDown_Area_Wind_Resist + // numericUpDown_Area_Wind_RotResist // - 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[] { 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, 131072 }); - numericUpDown_Area_Wind_Resist.ValueChanged += numericUpDown_Area_Wind_Update; + numericUpDown_Area_Wind_RotResist.DecimalPlaces = 3; + numericUpDown_Area_Wind_RotResist.Increment = new decimal(new int[] { 1, 0, 0, 65536 }); + numericUpDown_Area_Wind_RotResist.Location = new Point(89, 145); + numericUpDown_Area_Wind_RotResist.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDown_Area_Wind_RotResist.Name = "numericUpDown_Area_Wind_RotResist"; + numericUpDown_Area_Wind_RotResist.Size = new Size(60, 23); + numericUpDown_Area_Wind_RotResist.TabIndex = 15; + numericUpDown_Area_Wind_RotResist.Value = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDown_Area_Wind_RotResist.ValueChanged += numericUpDown_Area_Wind_Update; + // + // label65 + // + label65.AutoSize = true; + label65.Location = new Point(6, 147); + label65.Name = "label65"; + label65.Size = new Size(77, 15); + label65.TabIndex = 14; + label65.Text = "Rotate Resist:"; + // + // numericUpDown_Area_Wind_PosResist + // + numericUpDown_Area_Wind_PosResist.DecimalPlaces = 3; + numericUpDown_Area_Wind_PosResist.Location = new Point(89, 116); + numericUpDown_Area_Wind_PosResist.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDown_Area_Wind_PosResist.Name = "numericUpDown_Area_Wind_PosResist"; + numericUpDown_Area_Wind_PosResist.Size = new Size(60, 23); + numericUpDown_Area_Wind_PosResist.TabIndex = 13; + numericUpDown_Area_Wind_PosResist.Value = new decimal(new int[] { 100, 0, 0, 0 }); + numericUpDown_Area_Wind_PosResist.ValueChanged += numericUpDown_Area_Wind_Update; // // label64 // label64.AutoSize = true; - label64.Location = new Point(13, 118); + label64.Location = new Point(6, 118); label64.Name = "label64"; - label64.Size = new Size(40, 15); + label64.Size = new Size(73, 15); label64.TabIndex = 12; - label64.Text = "Resist:"; + label64.Text = "Move Resist:"; // // label63 // @@ -1777,7 +1802,7 @@ // checkBox_Area_Wind_Enable // checkBox_Area_Wind_Enable.AutoSize = true; - checkBox_Area_Wind_Enable.Location = new Point(165, 125); + checkBox_Area_Wind_Enable.Location = new Point(165, 149); checkBox_Area_Wind_Enable.Name = "checkBox_Area_Wind_Enable"; checkBox_Area_Wind_Enable.Size = new Size(39, 19); checkBox_Area_Wind_Enable.TabIndex = 0; @@ -1987,7 +2012,8 @@ tabPage_Area.ResumeLayout(false); groupBox4.ResumeLayout(false); groupBox4.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Resist).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_RotResist).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_PosResist).EndInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Density).EndInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Speed_To).EndInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Direction).EndInit(); @@ -2151,7 +2177,9 @@ private Label label63; private NumericUpDown numericUpDown_Area_Wind_Density; private Label label62; - private NumericUpDown numericUpDown_Area_Wind_Resist; + private NumericUpDown numericUpDown_Area_Wind_PosResist; private Label label64; + private NumericUpDown numericUpDown_Area_Wind_RotResist; + private Label label65; } } diff --git a/DroneSimulator/FormMain.cs b/DroneSimulator/FormMain.cs index 10ceaff..a4b8450 100644 --- a/DroneSimulator/FormMain.cs +++ b/DroneSimulator/FormMain.cs @@ -308,7 +308,8 @@ namespace DroneSimulator Area.Wind.Speed.To = (float)numericUpDown_Area_Wind_Speed_To.Value; Area.Wind.Direction = (float)numericUpDown_Area_Wind_Direction.Value; Area.Wind.Density = (float)numericUpDown_Area_Wind_Density.Value; - Area.Wind.Resist = (float)numericUpDown_Area_Wind_Resist.Value; + Area.Wind.PosResist = ((float)numericUpDown_Area_Wind_PosResist.Value)/1000.0f; + Area.Wind.RotResist = ((float)numericUpDown_Area_Wind_RotResist.Value)/1000.0f; } } }