Beispiel #1
0
    public IList <Punto> ObtenerPuntosDeIntercepcionCon(Circunferencia otra)
    {
        if (!this.Intercepta(otra))
        {
            throw new Exception("Las circunferencias no se interceptan.");
        }

        var puntos = new List <Punto>();

        //Temporarias para el cálculo de los puntos y los coeficientes
        double t1 = -(otra.Centro.Y - otra.Centro.X) / (otra.Centro.X - this.Centro.X);
        double t2 = (otra.Centro.X * otra.Centro.X - this.Centro.X * this.Centro.X + otra.Centro.Y * otra.Centro.Y -
                     this.Centro.Y * this.Centro.Y + this.Radio * this.Radio - otra.Radio * otra.Radio) /
                    (2 * (otra.Centro.X - this.Centro.X));

        //Coeficientes de la ecuación cuadratica
        double a = t2 * t2 + 1;
        double b = 2 * (t1 * (t2 - this.Centro.X) - this.Centro.Y);
        double c = t2 * t2 - 2 * t2 * this.Centro.X + this.Centro.X * this.Centro.X + this.Centro.Y * this.Centro.Y -
                   this.Radio * this.Radio;

        double discriminante = b * b - 4 * a * c;

        if (discriminante > 0)
        {
            //Cálculo de los puntos solucion en base a las dos variantes de la formula cúadratica
            for (int i = 1; i >= -1; i = i - 2)
            {
                double y = (b + i * Math.Pow(discriminante, 0.5)) / (2 * a);
                double x = y * t1 + t2;

                puntos.Add(new Punto(x, y));
            }
        }
        return(puntos.ToArray());
    }
        private void EditarToolStripButton_Click(object sender, EventArgs e)
        {
            if (DatosDataGridView.SelectedRows.Count == 0)
            {
                return;
            }

            DataGridViewRow r = DatosDataGridView.SelectedRows[0];
            Circunferencia  circunferencia = r.Tag as Circunferencia;
            Circunferencia  cirAuxiliar    = circunferencia.Clone() as Circunferencia;

            FrmCircunferenciaAE frm = new FrmCircunferenciaAE();

            frm.Text = "Edición de Circunferencia";
            frm.SetCircunferencia(cirAuxiliar);
            DialogResult dr = frm.ShowDialog(this);

            if (dr == DialogResult.OK)
            {
                cirAuxiliar = frm.GetCircunferencia();
                if (!_repositorio.ExisteCircunferencia(cirAuxiliar))
                {
                    circunferencia = cirAuxiliar;
                    _repositorio.EstaModificado = true;
                    SetearFila(r, circunferencia);
                    MessageBox.Show("Registro editado", "Mensaje", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
                else
                {
                    SetearFila(r, circunferencia);
                    MessageBox.Show("Registro existente", "Error",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
Beispiel #3
0
 public Form1()
 {
     objMoneda = new Circunferencia(1.4);
     objRueda  = new Circunferencia(10.2);
     InitializeComponent();
 }
 public void SetCircunferencia(Circunferencia circunferencia)
 {
     _circunferencia = circunferencia;
 }
Beispiel #5
0
 public void Borrar(Circunferencia circunferencia)
 {
     ListaCircunferencias.Remove(circunferencia);
     EstaModificado = true;
 }
Beispiel #6
0
 public void Agregar(Circunferencia circunferencia)
 {
     ListaCircunferencias.Add(circunferencia);
     EstaModificado = true;
 }
Beispiel #7
0
 public bool ExisteCircunferencia(Circunferencia circunferencia)
 {
     return(ListaCircunferencias.Contains(circunferencia));
 }
Beispiel #8
0
 private string ConstruirLinea(Circunferencia circunferencia)
 {
     return($"{circunferencia.Radio}");
 }
Beispiel #9
0
 public double DistanciaEntreCentrosCon(Circunferencia otra)
 {
     return(Math.Pow(Math.Pow(this.Centro.X - otra.Centro.X, 2) + Math.Pow(this.Centro.Y - otra.Centro.Y, 2), 0.5));
 }
Beispiel #10
0
    public bool Intercepta(Circunferencia otra)
    {
        double d = this.DistanciaEntreCentrosCon(otra);

        return(d >= Math.Abs(this.Radio - otra.Radio) && d <= this.Radio + otra.Radio);
    }