本文整理汇总了Java中org.apache.commons.math3.exception.util.LocalizedFormats.ZERO_NORM_FOR_ROTATION_DEFINING_VECTOR属性的典型用法代码示例。如果您正苦于以下问题:Java LocalizedFormats.ZERO_NORM_FOR_ROTATION_DEFINING_VECTOR属性的具体用法?Java LocalizedFormats.ZERO_NORM_FOR_ROTATION_DEFINING_VECTOR怎么用?Java LocalizedFormats.ZERO_NORM_FOR_ROTATION_DEFINING_VECTOR使用的例子?那么, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在类org.apache.commons.math3.exception.util.LocalizedFormats
的用法示例。
在下文中一共展示了LocalizedFormats.ZERO_NORM_FOR_ROTATION_DEFINING_VECTOR属性的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: FieldRotation
/** Build one of the rotations that transform one vector into another one.
* <p>Except for a possible scale factor, if the instance were
* applied to the vector u it will produce the vector v. There is an
* infinite number of such rotations, this constructor choose the
* one with the smallest associated angle (i.e. the one whose axis
* is orthogonal to the (u, v) plane). If u and v are collinear, an
* arbitrary rotation axis is chosen.</p>
* @param u origin vector
* @param v desired image of u by the rotation
* @exception MathArithmeticException if the norm of one of the vectors is zero
*/
public FieldRotation(final FieldVector3D<T> u, final FieldVector3D<T> v) throws MathArithmeticException {
final T normProduct = u.getNorm().multiply(v.getNorm());
if (normProduct.getReal() == 0) {
throw new MathArithmeticException(LocalizedFormats.ZERO_NORM_FOR_ROTATION_DEFINING_VECTOR);
}
final T dot = FieldVector3D.dotProduct(u, v);
if (dot.getReal() < ((2.0e-15 - 1.0) * normProduct.getReal())) {
// special case u = -v: we select a PI angle rotation around
// an arbitrary vector orthogonal to u
final FieldVector3D<T> w = u.orthogonal();
q0 = normProduct.getField().getZero();
q1 = w.getX().negate();
q2 = w.getY().negate();
q3 = w.getZ().negate();
} else {
// general case: (u, v) defines a plane, we select
// the shortest possible rotation: axis orthogonal to this plane
q0 = dot.divide(normProduct).add(1.0).multiply(0.5).sqrt();
final T coeff = q0.multiply(normProduct).multiply(2.0).reciprocal();
final FieldVector3D<T> q = FieldVector3D.crossProduct(v, u);
q1 = coeff.multiply(q.getX());
q2 = coeff.multiply(q.getY());
q3 = coeff.multiply(q.getZ());
}
}
示例2: Rotation
/** Build one of the rotations that transform one vector into another one.
* <p>Except for a possible scale factor, if the instance were
* applied to the vector u it will produce the vector v. There is an
* infinite number of such rotations, this constructor choose the
* one with the smallest associated angle (i.e. the one whose axis
* is orthogonal to the (u, v) plane). If u and v are collinear, an
* arbitrary rotation axis is chosen.</p>
* @param u origin vector
* @param v desired image of u by the rotation
* @exception MathArithmeticException if the norm of one of the vectors is zero
*/
public Rotation(Vector3D u, Vector3D v) throws MathArithmeticException {
double normProduct = u.getNorm() * v.getNorm();
if (normProduct == 0) {
throw new MathArithmeticException(LocalizedFormats.ZERO_NORM_FOR_ROTATION_DEFINING_VECTOR);
}
double dot = u.dotProduct(v);
if (dot < ((2.0e-15 - 1.0) * normProduct)) {
// special case u = -v: we select a PI angle rotation around
// an arbitrary vector orthogonal to u
Vector3D w = u.orthogonal();
q0 = 0.0;
q1 = -w.getX();
q2 = -w.getY();
q3 = -w.getZ();
} else {
// general case: (u, v) defines a plane, we select
// the shortest possible rotation: axis orthogonal to this plane
q0 = FastMath.sqrt(0.5 * (1.0 + dot / normProduct));
double coeff = 1.0 / (2.0 * q0 * normProduct);
Vector3D q = v.crossProduct(u);
q1 = coeff * q.getX();
q2 = coeff * q.getY();
q3 = coeff * q.getZ();
}
}