Example #1
0
viewport::viewport(const vec &eyepos,
                   const vec &eyeforward,
                   const vec &eyeup,
                   double hangle,
                   double vangle)
 :
    mEyepos(eyepos),
    mEyeforward(eyeforward / norm(eyeforward, 2)),
    mEyeup((eyeup - dot(mEyeforward, eyeup)*mEyeforward)
           / norm(eyeup - dot(mEyeforward, eyeup)*mEyeforward, 2)),
    mHangle(hangle),
    mVangle(vangle)
{
    //cout << "Viewport constructor" << endl;

    mEyeright = cross(eyeforward, eyeup);

    //cout << rotmat(mEyeup, hangle/2.0) << endl;

    mEyel = rotmat(mEyeup, hangle/2.0) * mEyeforward;
    mEyer = rotmat(mEyeup, -hangle/2.0) * mEyeforward;

    mEyet = rotmat(mEyeright, vangle/2.0) * mEyeforward;
    mEyeb = rotmat(mEyeright, -vangle/2.0) * mEyeforward;
}
double DirectEvaluationSlaterWithJastrow::computeJastrowFactor() {
    double jastrowLogarithm = 0;
    for (unsigned int electron1 = 0; electron1 < m_system->getElectrons().size(); electron1++) {
        for (unsigned int electron2 = electron1+1; electron2 < m_system->getElectrons().size(); electron2++) {
            const double r12 = norm(m_system->getElectrons().at(electron1)->getPosition() -
                                  m_system->getElectrons().at(electron2)->getPosition());
            const int spin1 = m_system->getElectrons().at(electron1)->getSpin();
            const int spin2 = m_system->getElectrons().at(electron2)->getSpin();
            const double spinFactor = (spin1 == spin2) ? 0.25 : 0.5;

            jastrowLogarithm += spinFactor * r12 / (1 + r12 * m_beta);
        }
    }
    return exp(jastrowLogarithm);
}
Example #3
0
ray viewport::genray(double row, double col, double width, double height)
{
    vec hor_comp = -(col - width/2.0) / width * (mEyer - mEyel);
    //cout << "sub 1" << endl;
    vec ver_comp = -(row - height/2.0) / height * (mEyeb - mEyet);
    //cout << "sub 2" << endl;

    // if((int)floor(row)%100 == 0 && (int)floor(col)%100==0)
    // {
    //     cout << hor_comp << endl;
    //     cout << ver_comp << endl;
    //     cout << endl;
    // }

    ray generated(mEyepos, mEyeforward + hor_comp + ver_comp);
    generated.slope /= norm(generated.slope, 2);
    
    return generated;
}
int main(int argc, char **argv)
{
    PlayerClient client("localhost");
    RangerProxy  ranger(&client, 0);

    // Perform a preliminary fetch from the robot.
    client.Read();

    // Pull configuration information from remote ranger to the local ranger
    // proxy.
    ranger.RequestConfigure();
    ranger.RequestGeom();
    
        // Check the number of elements in the ranger
    // We only support laser-scanners (single-element, fan-of-readings devices)
    if(ranger.GetElementCount() != 1)
    {
        cerr << "This is not a laser rangefinder." << endl;
    }

    // Extract the scan parameters
    unsigned int num_readings = ranger.GetRangeCount();
    double       angle_min    = ranger.GetMinAngle();
    double       angle_max    = ranger.GetMaxAngle();
    double       angle_delta  = (angle_max - angle_min) / num_readings;

    cout << "Found laser ranger with properties: " << endl;
    cout << "min angle: "    << angle_min << endl;
    cout << "max angle: "    << angle_max << endl;
    cout << "num readings: " << num_readings << endl;
    cout << "angle delta: "  << angle_delta << endl;
    
    // Turn on the laser
    ranger.SetPower(true);

    // Storage for the point sequence
    mat points(2, num_readings);

    // Storage for the delta sequence
    mat deltas(2, num_readings-1);

    // Storage for the cross product and dot product sequences
    mat crossps(1, num_readings-2);
    mat dotps(1, num_readings-2);

    while(true)
    {
        // Fetch updates from the robot
        client.Read();
        
        // Copy readings from the ranger proxy
        double angle = angle_min;
        for(int count = 0; count < num_readings; count++)
        {
            points(0, count) = ranger[count] * cos(angle);
            points(1, count) = ranger[count] * sin(angle);
            
            angle += angle_delta;
        }

        // Compute deltas
        for(int count = 1; count < num_readings; count++)
        {
            deltas.col(count-1) = points.col(count) - points.col(count-1);
            deltas.col(count-1) /= norm(deltas.col(count-1), 2);
        }

        // Compute cross products and dot products
        for(int count = 2; count < num_readings; count++)
        {
            crossps(0, count-2) = deltas(0,count-2)*deltas(1, count-1)
                                  - deltas(0, count-1)*deltas(1, count-2);
            
            dotps(0, count-2) = dot(deltas.col(count-2), deltas.col(count-1));
        }

        // Bootstrap output
        angle = angle_min;
        for(int count = 2; count < num_readings; count++)
        {
            cout << angle << " " << crossps(0, count-2) << endl;
            angle += angle_delta;
        }

        cout << endl;

        break;
    }

    return 0;
}