|
private void Dibujar(object sender, PaintEventArgs e) |
|
{ |
|
Graphics g = e.Graphics; |
|
|
|
Pen blackPen = new Pen(Color.Black, 3); |
|
g.DrawEllipse(blackPen, PuntoLinea01.X, PuntoLinea01.Y - 5, 10, 10); |
|
g.DrawLine(Pens.Gray, 0, PuntoMedio.Y, PuntoInicio.X, PuntoMedio.Y); |
|
g.DrawLine(Pens.Blue, PuntoMedio.X, 0, PuntoMedio.X, PuntoInicio.Y); |
|
g.DrawLine(Pens.Purple, PuntoMedio, PuntoLinea01); |
|
|
|
double angulo = Math.Atan2(PuntoLinea02.Y - 0, PuntoLinea02.X - PuntoMedio.X) * 180 / Math.PI; |
|
label1.Text = angulo.ToString(); |
|
double angulo2 = Math.Atan2(PuntoLinea01.Y-PuntoLinea02.Y ,PuntoLinea01.X-PuntoLinea02.X) * 180 / Math.PI; |
|
label2.Text = angulo2.ToString(); |
|
|
|
#region gradocentral |
|
double hipotenusaAnguloCentral= (PuntoLinea01.Y - PuntoMedio.Y) / -(PuntoLinea01.X - PuntoMedio.X); |
|
double gradosangulo = Math.Atan2((PuntoLinea01.Y - PuntoMedio.Y), (PuntoLinea01.X - PuntoMedio.X)) * 180 / Math.PI; |
|
gradosangulo = -gradosangulo; |
|
label3.Text = gradosangulo.ToString(); |
|
#endregion |
|
|
|
|
|
double hipotenusa = Math.Sqrt(Math.Pow(getXReal(PuntoLinea01.X),2)+Math.Pow(getYReal(PuntoLinea01.Y),2)); |
|
|
|
double MitadHipotenusa = hipotenusa / 2; |
|
double LongitudMotor01; |
|
double LongitudMotor02; |
|
double LongitudMotor03; |
|
|
|
if (!checkBox3.Checked) |
|
{ |
|
LongitudMotor01 = hipotenusa * PorcentajeMotor01; |
|
LongitudMotor02 = hipotenusa * PorcentajeMotor02; |
|
LongitudMotor03 = hipotenusa * PorcentajeMotor03; |
|
} |
|
else |
|
{ |
|
LongitudMotor01 = 100; |
|
LongitudMotor02 = 50; |
|
LongitudMotor03 = 15; |
|
} |
|
|
|
double alturaMotor01 = LongitudMotor01 * (Math.Sin((gradosangulo*Math.PI)/180)); |
|
double baseMotor01 =Math.Sqrt( Math.Pow(LongitudMotor01,2)-Math.Pow(alturaMotor01,2)); |
|
double alturaMotor02 = LongitudMotor02 * (Math.Sin((gradosangulo * Math.PI) / 180)); |
|
double baseMotor02 = Math.Sqrt(Math.Pow(LongitudMotor02, 2) - Math.Pow(alturaMotor02, 2)); |
|
double alturaMotor03 = LongitudMotor03 * (Math.Sin((gradosangulo * Math.PI) / 180)); |
|
double baseMotor03 = Math.Sqrt(Math.Pow(LongitudMotor03, 2) - Math.Pow(alturaMotor03, 2)); |
|
|
|
float Motor01Medio = PuntoMedio.X + (float)baseMotor01; |
|
float Motor02Medio = Motor01Medio + (float)baseMotor02; |
|
float Motor03Medio = Motor02Medio + (float)baseMotor03; |
|
label4.Text = (alturaMotor01/LongitudMotor01).ToString(); |
|
|
|
|
|
g.DrawLine(Pens.Red, Motor01Medio, PuntoMedio.Y, Motor01Medio, PuntoMedio.Y - (float)alturaMotor01); |
|
g.DrawLine(Pens.RoyalBlue, Motor02Medio, PuntoMedio.Y, Motor02Medio, PuntoMedio.Y - (float)(alturaMotor02+alturaMotor01)); |
|
g.DrawLine(Pens.Plum, Motor03Medio, PuntoMedio.Y, Motor03Medio, PuntoMedio.Y - (float)(alturaMotor03+alturaMotor02+alturaMotor01)); |
|
|
|
double anguloMotor01 = Math.Asin(LongitudMotor01/hipotenusa)*180/Math.PI; |
|
double anguloMotoro01Base; |
|
if(checkBox2.Checked) |
|
anguloMotoro01Base = anguloMotor01+gradosangulo; |
|
else |
|
anguloMotoro01Base = anguloMotor01; |
|
double alturaAnguloMotor01 = LongitudMotor01 * (Math.Sin((anguloMotoro01Base * Math.PI) / 180)); |
|
double baseAnguloMotor01 = Math.Sqrt(Math.Pow(LongitudMotor01, 2) - Math.Pow(alturaAnguloMotor01, 2)); |
|
PointFloat PuntoFinalMotor01 = new PointFloat((float)baseAnguloMotor01 + PuntoMedio.X, PuntoMedio.Y - (float)alturaAnguloMotor01); |
|
g.DrawLine(Pens.Black, PuntoMedio.X, PuntoMedio.Y, PuntoFinalMotor01.X, PuntoFinalMotor01.Y); |
|
g.DrawLine(Pens.Green, (float)baseAnguloMotor01 + PuntoMedio.X, PuntoMedio.Y - (float)alturaAnguloMotor01, Motor01Medio, PuntoMedio.Y - (float)alturaMotor01); |
|
g.DrawLine(Pens.Yellow, (float)baseAnguloMotor01 + PuntoMedio.X, PuntoMedio.Y - (float)alturaAnguloMotor01, Motor02Medio, PuntoMedio.Y - (float)(alturaMotor02 + alturaMotor01)); |
|
g.DrawLine(Pens.Tomato, (float)baseAnguloMotor01 + PuntoMedio.X, PuntoMedio.Y - (float)alturaAnguloMotor01, Motor01Medio, PuntoMedio.Y); |
|
|
|
g.DrawLine(Pens.IndianRed, Motor01Medio, PuntoMedio.Y - (float)alturaMotor01, Motor02Medio, PuntoMedio.Y - (float)(alturaMotor02 + alturaMotor01)); |
|
|
|
double pendiente01 = getPendiente(Motor01Medio, PuntoMedio.Y - (float)alturaMotor01, Motor02Medio, PuntoMedio.Y - (float)(alturaMotor02 + alturaMotor01)); |
|
g.DrawLine(Pens.Green, (float)baseAnguloMotor01 + PuntoMedio.X, PuntoMedio.Y - (float)alturaAnguloMotor01, Motor01Medio, PuntoMedio.Y - (float)alturaMotor01); |
|
double pendiente02 = getPendiente((float)baseAnguloMotor01 + PuntoMedio.X, PuntoMedio.Y - (float)alturaAnguloMotor01, Motor02Medio, PuntoMedio.Y - (float)(alturaMotor02 + alturaMotor01)); |
|
|
|
label9.Text = getAnguloEntreRecta(pendiente01, pendiente02).ToString(); |
|
|
|
|
|
double distancia = getDistanciaEntreDosPuntos(PuntoFinalMotor01.X,PuntoFinalMotor01.Y,PuntoLinea01.X,PuntoLinea01.Y); |
|
double distancia2 = getDistanciaEntreDosPuntos(PuntoMedio.X, PuntoMedio.Y, PuntoFinalMotor01.X, PuntoFinalMotor01.Y); |
|
|
|
|
|
double anguloMotor02 = getAnguloEntreRecta( pendiente02,pendiente01); |
|
double alturaAnguloMotor02 = LongitudMotor02 * CalcularSeno(anguloMotor02); |
|
|
|
double baseAnguloMotor02 = Math.Sqrt(Math.Pow(LongitudMotor02, 2) - Math.Pow(alturaAnguloMotor02, 2)); |
|
|
|
PointFloat PuntoFinalMotor02 = new PointFloat((float)baseAnguloMotor02 + PuntoMedio.X + (float)baseAnguloMotor01, PuntoMedio.Y - (float)alturaAnguloMotor02-(float)alturaAnguloMotor01); |
|
label6.Text = getDistanciaEntreDosPuntos(PuntoFinalMotor01.X, PuntoFinalMotor01.Y, PuntoFinalMotor02.X, PuntoFinalMotor02.Y).ToString(); |
|
label4.Text = getDistanciaEntreDosPuntos(Motor01Medio, PuntoMedio.Y - (float)alturaMotor01, Motor02Medio, PuntoMedio.Y - (float)(alturaMotor02 + alturaMotor01)).ToString(); |
|
//change servo motor broken |
|
|
|
// g.DrawLine(Pens.Black, PuntoFinalMotor01.X, PuntoFinalMotor01.Y,PuntoFinalMotor02.X,PuntoFinalMotor02.Y); |
|
// g.DrawLine(Pens.Black, PuntoFinalMotor02.X, PuntoFinalMotor02.Y,PuntoLinea01.X,PuntoLinea01.Y); |
|
g.DrawLine(Pens.Black, PuntoFinalMotor01.X, PuntoFinalMotor01.Y, PuntoLinea01.X, PuntoLinea01.Y); |
|
lblAnguloMotor01.Text = getAnguloEntreDosRectas(PuntoFinalMotor01.X, PuntoFinalMotor01.Y, PuntoMedio.X, PuntoMedio.Y) + ""; |
|
lblAnguloMotor02.Text = anguloMotor02 + ""; |
|
|
|
double dLineaCentral = getPendiente(PuntoFinalMotor02.X, PuntoFinalMotor02.Y, PuntoLinea01.X, PuntoLinea01.Y); |
|
double dLineaMotor01 = getPendiente(PuntoMedio.X,PuntoMedio.Y, PuntoLinea01.X,PuntoLinea01.Y); |
|
|
|
MotorDeAngulos.setAnguloMotor01( AnguloMotor.ConvertirAngulo01RealAEstandar(Convert.ToDouble(lblAnguloMotor01.Text))); |
|
MotorDeAngulos.setAnguloMotor02( AnguloMotor.ConvertirAngulo02RealAEstandar(Convert.ToDouble(lblAnguloMotor02.Text))); |
|
|
|
label12.Text = MotorDeAngulos.getAnguloMotor03().ToString(); |
|
|
|
ActualizarMotor(); |
|
} |
|
|
|
public double getPendiente(double x1, double y1, double x2, double y2) |
|
{ |
|
return (y2 - y1) / (x2 - x1); |
|
} |
|
public double getAnguloEntreRecta(double m1, double m2){ |
|
double div = (m2 - m1) / (1 + (m1 * m2)); |
|
return CalcularATan(div); |
|
} |
|
public double getAnguloEntreDosRectas(double x1, double y1, double x2, double y2) { |
|
|
|
return Math.Atan2((y1 - y2), (x1 - x2)) * 180 / Math.PI; |
|
} |
|
public double getDistanciaEntreDosPuntos(double x1, double y1, double x2, double y2) |
|
{ |
|
return Math.Sqrt(Math.Pow((x1 - x2), 2.0) + Math.Pow((y1 - y2), 2.0)); |
|
} |
|
public double CalcularSeno(double valor) |
|
{ |
|
double temp = (valor * Math.PI)/180; |
|
return Math.Sin(temp); |
|
} |
|
|
|
public double CalcularASeno(double valor) |
|
{ |
|
double temp = Math.Asin(valor); |
|
return (valor * 180) / Math.PI; |
|
|
|
} |
|
public double CalcularATan(double valor) |
|
{ |
|
double temp = Math.Atan(valor); |
|
return (valor * 180) / Math.PI; |
|
|
|
} |
|
public double getXReal(double valor) |
|
{ |
|
return valor - PuntoMedio.X; |
|
} |
|
public double getYReal(double valor) |
|
{ |
|
return valor - PuntoMedio.Y; |
|
} |