/// <summary> /// Добавить контуры другого региона, применив к ним трансформацию. /// </summary> /// <param name="region">Регион, из которого будут копироваться контуры.</param> /// <param name="trans">Трансформация, которая будет применяться к контурам.</param> public void AddWithTransform(IRegion region, Transform trans) { foreach (IContour cont in region.Contours) { BasicContour ncont = new BasicContour(); ncont.AddWithTransform(cont, trans); DrawningContours.Add(ncont); } }
/// <summary> /// Получить обратную трансформацию. /// </summary> /// <returns>Трансформация, обратная данной.</returns> public Transform GetReverse() { double det = GetDeterminant(); Transform ntr = new Transform(); for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) { double add = 0; for (int k = 0; k < 3; ++k) for (int p = 0; p < 3; ++p) { if ((k + p) % 2 == 0) { add += m[k, p]; } else { add -= m[k, p]; } } if ((i + j) % 2 != 0) add = -add; ntr.m[i, j] = add / det; } return ntr; }
public Transform(Transform trans) { for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) this.m[i, j] = trans.m[i, j]; }
/// <summary> /// Умножить данную трансформацию на другую. /// </summary> /// <param name="trans">С чем сливаем.</param> /// <returns>Эта же трансформация, но измененная.</returns> public Transform Mult(Transform trans) { return Mult(trans, false); }
/* /// <summary> /// Сложить трансформации. /// </summary> /// <param name="trans">С чем перемножаем.</param> /// <returns>Новая трансформация.</returns> public Transform Add(Transform trans) { Transform ntr = new Transform(this); ntr.Mult(trans); return ntr; }*/ /// <summary> /// Умножить данную трансформацию на другую. /// </summary> /// <param name="trans">С чем сливаем.</param> /// <returns>Эта же трансформация, но измененная.</returns> public Transform Mult(Transform trans, bool isBefore) { Mult(trans.m, isBefore); return this; }
/// <summary> /// Добавить точки другого контура, применив /// к ним трансформацию. /// </summary> /// <param name="contour">Контур, из которого копируются точки.</param> /// <param name="trans">Трансформация, которая примениться к точкам.</param> public void AddWithTransform(IContour contour, Transform trans) { foreach (Point pnt in contour.Points) DrawningPoints.Add(trans.Apply(pnt)); }