3 votos

Fórmula de corrección para dos puntos

Esto es dolorosamente simple -lo siento- pero no soy un tipo de matemáticas y podría necesitar algo de ayuda. Imagina que tengo una superficie que va desde $(0,0)$ a $(100,100)$ - un cuadrado. En él, espero encontrar dos puntos de una medición anterior en $(10,10)$ y $(90,90)$ - digamos que fueron marcados de alguna manera. Pero alguien se metió con mi superficie. La rotó, la trasladó, o ambas cosas, todo dentro del mismo plano.

Ahora cuando voy a buscar mi esperado $(10,10)$ punto $1$ Me parece que en realidad está en $(8,13)$ . Y cuando luego busco mi punto $2$ Lo encuentro en $(95,80)$ (o algo parecido donde la distancia entre los puntos no haya cambiado).

¿Cuál es la fórmula que necesito para tomar cualquier $(x,y)$ y aplicar una corrección para obtener mi verdadero $(x,y)$ ¿puesto?

Esto no es un problema de deberes, por cierto. Es un problema del mundo real.

1voto

Andreas Grabner Puntos 126

Depende de la estructura de la función. Hasta ahora parece que estás hablando de mapas afines. Los mapas afines son similares a los mapas lineales que son isomorfismos, y pueden tratarse como isomorfismos lineales hasta la traslación, o como mapas lineales que proyectan un espacio de mayor dimensión sobre el espacio afín como subconjunto del espacio proyectivo. Si el origen fuera fijo, los valores del mapa estarían determinados por la ley $f(x+y)=f(x)+f(y)$ . Esto significaría que si se sumaran muchas copias del mismo vector -trazando una línea- se podrían sumar otras tantas copias del vector transformado para obtener el valor de la transformación en el vector. Así pues, lo que necesitas para calcular todos los resultados de un mapa afín, es decir, un mapa lineal más una traslación, es su valor en un tercer punto, que puedes suponer que es el origen de las líneas a los dos valores que conoces. Llama a este punto $O$ y la transformación $T$ . Entonces $(T(x)-T(O))+(T(y)-T(O)) = T(x+y)-T(O)$ .

0voto

bubba Puntos 16773

Aquí hay algo de código C#:

using System;
using System.Windows;

class Mapper
{
   public static Point MapPoint(Point a1, Point a2, Point b1, Point b2, Point p)
   {
      Vector u = a2 - a1;         // Vector along source line a1-a2
      Vector v = b2 - b1;         // Vector along destination line b1-b2

      Point am = a1 + 0.5*u;      // Mid-point of line a1-a2
      Point bm = b1 + 0.5*v;      // Mid-point of line b1-b2

      double factor = 1 / (u.Length * v.Length);
      double cosA = (u*v) * factor;
      double sinA = Vector.CrossProduct(u,v) * factor;

      double x = (p - am).X * cosA - (p - am).Y * sinA + bm.X;
      double y = (p - am).X * sinA + (p - am).Y * cosA + bm.Y;

      return new Point(x,y);
   }

   static void Main(string[] args)
   {
      Point a1 = new Point(2,1);    Point a2 = new Point(8,5);   Point am = new Point(5,3);
      Point b1 = new Point(1,3);    Point b2 = new Point(5,9);   Point bm = new Point(3,6);

      Point p, q;
      p = a1;
      q = MapPoint(a1, a2, b1, b2, p);  
      Console.WriteLine("a1 maps to: " + q.ToString());  // q should = b1

      p = a2;  
      q = MapPoint(a1, a2, b1, b2, p);  
      Console.WriteLine("a2 maps to: " + q.ToString());  // q should = b2

      p = am;  
      q = MapPoint(a1, a2, b1, b2, p);  
      Console.WriteLine("am maps to: " + q.ToString());  // q should = bm

      Console.ReadLine();
   }
}

Utiliza las estructuras Point y Vector de System.Windows (en el ensamblaje WindowsBase).

La parte importante es la función MapPoint. Asigna un punto de entrada $p$ a un punto de salida que es devuelto por la función. El mapeo está definido por cuatro puntos $a_1$ , $a_2$ , $b_1$ y $b_2$ . La idea es que la "fuente" señale $a_1$ y $a_2$ se asignan (aproximadamente) a los puntos de destino $b_1$ y $b_2$ respectivamente. Este mapeo sólo será exacto si las distancias $a_1a_2$ y $b_1b_2$ son iguales. En realidad, lo que ocurre es que el punto medio de $a_1a_2$ se asigna al punto medio de $b_1b_2$ .

El código de prueba en la función Main muestra que las cosas funcionan correctamente. El punto medio $a_m$ se asigna a $b_m$ como era de esperar. Además, en este caso, $a_1$ se asigna a $b_1$ y $a_2$ se asigna a $b_2$ ya que las distancias $a_1a_2$ y $b_1b_2$ son iguales.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X