/// <summary> /// Поворачивает эту систему координат осью X на точку target. /// Точки из списка поворачиваются так, что их координаты в этой /// системе координат не меняются. /// </summary> /// /// <param name="target"> Точка в этой системе координат, на которую поворачивается эта.</param> /// <param name="points"> Список точек, которые поворачиваются вместе с этой системой координат.</param> /// /// <exception cref="ArgumentNullException"> /// Вызывается, если в параметр target передается null. /// </exception> public void TurnTo(Vector target, List <Vector> points = null) { if (target == null) { throw new ArgumentNullException("target mustn't be null"); } UnitVector direction = new UnitVector(target); UnitVector axis = direction * basis.I; double angle = -Vector.GetAngle(direction, basis.I); if (points != null) { foreach (Vector point in points) { point.TurnAxis(axis, angle); } } basis.TurnAxis(axis, angle); }
/// <summary> /// i {1; 0; 0}<br/> /// j {0; 1; 0}<br/> /// k {0; 0; 1}<br/> /// </summary> public Basis() { i = UnitVector.UnitVectorX; j = UnitVector.UnitVectorY; k = UnitVector.UnitVectorZ; }
/// <summary> /// Копирует вектора из параметров. Вектора не должны быть компланарны или null. /// </summary> /// /// <param name="i"> Единичный вектор i. Не должен быть равен null.</param> /// <param name="j"> Единичный вектор j. Не должен быть равен null.</param> /// <param name="k"> Единичный вектор k. Не должен быть равен null.</param> /// /// <exception cref="ArgumentNullException"> /// Вызывается, если хотя бы один из параметров null. /// </exception> /// <exception cref="ArgumentException"> /// Вызывается, если передаваемые векторы компланарны. /// </exception> public Basis(UnitVector i, UnitVector j, UnitVector k) { this.I = new UnitVector(i); this.J = new UnitVector(j); this.K = new UnitVector(k); }
/// <summary> /// Правая система координат по единичным векторам i и j. Эти вектора не должны быть коллинеарными. /// </summary> /// /// <param name="i"> Единичный вектор i. Не должен быть равен null.</param> /// <param name="j"> Единичный вектор j. Не должен быть равен null.</param> /// /// <exception cref="ArgumentNullException"> /// Вызывается, если хотя бы один из параметров null. /// </exception> public Basis(UnitVector i, UnitVector j) : this(i, j, i *j) { }