예제 #1
0
/*!
 * \brief Ellipse::setUnknownParameters
 * \param parameters
 */
void Ellipse::setUnknownParameters(const QMap<GeometryParameters, double> &parameters){

    //get current parameters
    OiVec position = this->center.getVector();
    OiVec directionA = this->normal.getVector();
    OiVec directionB = this->semiMajorAxis.getVector();
    double a = this->a;
    double b = this->b;

    //update parameters
    QList<GeometryParameters> keys = parameters.keys();
    foreach(const GeometryParameters &key, keys){
        switch(key){
        case eUnknownX:
            position.setAt(0, parameters.value(eUnknownX));
            break;
        case eUnknownY:
            position.setAt(1, parameters.value(eUnknownY));
            break;
        case eUnknownZ:
            position.setAt(2, parameters.value(eUnknownZ));
            break;
        case eUnknownPrimaryI:
            directionA.setAt(0, parameters.value(eUnknownPrimaryI));
            break;
        case eUnknownPrimaryJ:
            directionA.setAt(1, parameters.value(eUnknownPrimaryJ));
            break;
        case eUnknownPrimaryK:
            directionA.setAt(2, parameters.value(eUnknownPrimaryK));
            break;
        case eUnknownA:
            a = parameters.value(eUnknownA);
            break;
        case eUnknownB:
            b = parameters.value(eUnknownB);
            break;
        case eUnknownSecondaryI:
            directionB.setAt(0, parameters.value(eUnknownSecondaryI));
            break;
        case eUnknownSecondaryJ:
            directionB.setAt(1, parameters.value(eUnknownSecondaryJ));
            break;
        case eUnknownSecondaryK:
            directionB.setAt(2, parameters.value(eUnknownSecondaryK));
            break;
        }
    }

    //update ellipse definition
    directionA.normalize();
    directionB.normalize();
    Position ellipsePosition(position);
    Direction ellipseDirectionA(directionA);
    Direction ellipseDirectionB(directionB);
    this->setEllipse(ellipsePosition, ellipseDirectionA, a, b, ellipseDirectionB);

}
예제 #2
0
파일: oimat.cpp 프로젝트: cedmayer/OpenIndy
/*!
 * \brief OiMat::getRotationMatrix
 * Get the rotation matrix corresponding to a rotation around an arbitrary rotation axis by the given amount
 * \param angle
 * \param axis
 * \return
 */
OiMat OiMat::getRotationMatrix(double angle, OiVec axis){
    if(axis.getSize() == 3){
        OiMat result(3, 3);

        axis = axis.normalize();

        double w = qCos(angle / 2.0);
        OiVec x = qSin(angle / 2.0) * axis;

        result.setAt(0, 0, 1.0 - 2.0 * (x.getAt(1)*x.getAt(1) + x.getAt(2)*x.getAt(2)));
        result.setAt(0, 1, 2.0 * (x.getAt(0)*x.getAt(1) - w * x.getAt(2)));
        result.setAt(0, 2, 2.0 * (x.getAt(0)*x.getAt(2) + w * x.getAt(1)));
        result.setAt(1, 0, 2.0 * (x.getAt(0)*x.getAt(1) + w * x.getAt(2)));
        result.setAt(1, 1, 1.0 - 2.0 * (x.getAt(0)*x.getAt(0) + x.getAt(2)*x.getAt(2)));
        result.setAt(1, 2, 2.0 * (x.getAt(1)*x.getAt(2) - w * x.getAt(0)));
        result.setAt(2, 0, 2.0 * (x.getAt(0)*x.getAt(2) - w * x.getAt(1)));
        result.setAt(2, 1, 2.0 * (x.getAt(1)*x.getAt(2) + w * x.getAt(0)));
        result.setAt(2, 2, 1.0 - 2.0 * (x.getAt(0)*x.getAt(0) + x.getAt(1)*x.getAt(1)));

        return result;
    }else{
        throw logic_error("To set up the rotation matrix the given axis has to be of size 3");
        return OiMat();
    }
}
예제 #3
0
/*!
 * \brief Torus::setUnknownParameters
 * \param parameters
 */
void Torus::setUnknownParameters(const QMap<GeometryParameters, double> &parameters){

    //get current parameters
    OiVec position = this->center.getVector();
    OiVec direction = this->normal.getVector();
    double radiusA = this->radiusA.getRadius();
    double radiusB = this->radiusB.getRadius();

    //update parameters
    QList<GeometryParameters> keys = parameters.keys();
    foreach(const GeometryParameters &key, keys){
        switch(key){
        case eUnknownX:
            position.setAt(0, parameters.value(eUnknownX));
            break;
        case eUnknownY:
            position.setAt(1, parameters.value(eUnknownY));
            break;
        case eUnknownZ:
            position.setAt(2, parameters.value(eUnknownZ));
            break;
        case eUnknownPrimaryI:
            direction.setAt(0, parameters.value(eUnknownPrimaryI));
            break;
        case eUnknownPrimaryJ:
            direction.setAt(1, parameters.value(eUnknownPrimaryJ));
            break;
        case eUnknownPrimaryK:
            direction.setAt(2, parameters.value(eUnknownPrimaryK));
            break;
        case eUnknownRadiusA:
            radiusA = parameters.value(eUnknownRadiusA);
            break;
        case eUnknownRadiusB:
            radiusB = parameters.value(eUnknownRadiusA);
            break;
        }
    }

    //update torus definition
    direction.normalize();
    Position torusPosition(position);
    Direction torusDirection(direction);
    Radius torusRadiusA(radiusA);
    Radius torusRadiusB(radiusB);
    this->setTorus(torusPosition, torusDirection, torusRadiusA, torusRadiusB);

}
예제 #4
0
/*!
 * \brief Line::setUnknownParameters
 * \param parameters
 */
void Line::setUnknownParameters(const QMap<GeometryParameters, double> &parameters){

    //get current parameters
    OiVec position = this->xyz.getVector();
    OiVec direction = this->axis.getVector();

    //update parameters
    QList<GeometryParameters> keys = parameters.keys();
    foreach(const GeometryParameters &key, keys){
        switch(key){
        case eUnknownX:
            position.setAt(0, parameters.value(eUnknownX));
            break;
        case eUnknownY:
            position.setAt(1, parameters.value(eUnknownY));
            break;
        case eUnknownZ:
            position.setAt(2, parameters.value(eUnknownZ));
            break;
        case eUnknownPrimaryI:
            direction.setAt(0, parameters.value(eUnknownPrimaryI));
            break;
        case eUnknownPrimaryJ:
            direction.setAt(1, parameters.value(eUnknownPrimaryJ));
            break;
        case eUnknownPrimaryK:
            direction.setAt(2, parameters.value(eUnknownPrimaryK));
            break;
        }
    }

    //update line definition
    direction.normalize();
    Position linePosition(position);
    Direction lineDirection(direction);
    this->setLine(linePosition, lineDirection);

}