コード例 #1
0
ファイル: Render.cpp プロジェクト: wao1201/ense470-helicopter
//the following 2 functions are no longer being used to and real extent, but were left in to avoid errors in the functions that use them
osg::Vec3f Render::calculateForceDirections(float force, osg::Vec2f direction){
	Vector2 vector = Vector2::Vector2(direction.x(), direction.y());
	float viewHeight = viewer.getCamera()->getViewport()->height();
	float viewWidth = viewer.getCamera()->getViewport()->width();
	
	float relationship = (viewHeight<viewWidth)?15/(viewHeight/4):15/(viewWidth/4);
	
	float theta = osg::DegreesToRadians(vector.Length()*relationship);
	float phi = atan2(direction.y(), direction.x());

	Logger::getInstance()->log("Theta: " + f2s(theta) + " Phi: " + f2s(phi));
	return osg::Vec3f(-(force*sin(theta)*cos(phi)), -(force*sin(theta)*sin(phi)),(force*cos(theta)));
}
コード例 #2
0
void
peerDigestStatsReport(const PeerDigest * pd, StoreEntry * e)
{
#define f2s(flag) (pd->flags.flag ? "yes" : "no")
#define appendTime(tm) storeAppendPrintf(e, "%s\t %10d\t %+d\t %+d\n", \
    ""#tm, pd->times.tm, \
    saneDiff(pd->times.tm - squid_curtime), \
    saneDiff(pd->times.tm - pd->times.initialized))

    const char *host = pd ? strBuf(pd->host) : NULL;
    assert(pd);

    storeAppendPrintf(e, "\npeer digest from %s\n", host);

    cacheDigestGuessStatsReport(&pd->stats.guess, e, host);

    storeAppendPrintf(e, "\nevent\t timestamp\t secs from now\t secs from init\n");
    appendTime(initialized);
    appendTime(needed);
    appendTime(requested);
    appendTime(received);
    appendTime(next_check);

    storeAppendPrintf(e, "peer digest state:\n");
    storeAppendPrintf(e, "\tneeded: %3s, usable: %3s, requested: %3s\n",
	f2s(needed), f2s(usable), f2s(requested));
    storeAppendPrintf(e, "\n\tlast retry delay: %d secs\n",
	pd->times.retry_delay);
    storeAppendPrintf(e, "\tlast request response time: %d secs\n",
	pd->times.req_delay);
    storeAppendPrintf(e, "\tlast request result: %s\n",
	pd->req_result ? pd->req_result : "(none)");

    storeAppendPrintf(e, "\npeer digest traffic:\n");
    storeAppendPrintf(e, "\trequests sent: %d, volume: %d KB\n",
	pd->stats.sent.msgs, (int) pd->stats.sent.kbytes.kb);
    storeAppendPrintf(e, "\treplies recv:  %d, volume: %d KB\n",
	pd->stats.recv.msgs, (int) pd->stats.recv.kbytes.kb);

    storeAppendPrintf(e, "\npeer digest structure:\n");
    if (pd->cd)
	cacheDigestReport(pd->cd, host, e);
    else
	storeAppendPrintf(e, "\tno in-memory copy\n");
}
コード例 #3
0
ファイル: main.cpp プロジェクト: RitterRBC/Arduino
void showPressureSensor()
{
  float pressure = 0;
  float temperature = 0;
  pressureSensor -> getPressure(&pressure);
  pressureSensor -> getTemperature(&temperature);
  char buff[128];
  sprintf(buff, "Environment\r\nPressure: \r\n    %shPa\r\nTemp: %sC \r\n",f2s(pressure, 2), f2s(temperature, 1));
  Screen.print(buff);
}
コード例 #4
0
ファイル: mal.c プロジェクト: ubsan/libAlgebra
/** Prints a matrix.
 *  Looks like:
 *  [ a, b, c ]
 *  [ d, e, f ]
 *  [ g, h, i ]
 */
int MatrixPrint(matrix mx)
{
    for(int row = 0; row < mx.rows; row++) {
        printf("[ ");

        for(int col = 0; col < mx.columns; col++) {
            printf("%s ", f2s(mx.mx[row][col]));
        }

        printf("]\n");
    }
    return 0;
}
コード例 #5
0
/* ----------------------------------------------------------------------------
 * Loads data about the leader type from a data file.
 */
void leader_type::load_from_file(
    data_node* file, const bool load_resources,
    vector<pair<size_t, string> >* anim_conversions
) {
    pluck_delay =
        s2f(file->get_child_by_name("pluck_delay")->value);
    whistle_range =
        s2f(
            file->get_child_by_name("whistle_range")->get_value_or_default(
                f2s(DEF_WHISTLE_RANGE)
            )
        );
    punch_strength =
        s2i(file->get_child_by_name("punch_strength")->value); //TODO default.
    throw_height_mult =
        s2f(
            file->get_child_by_name("throw_height_mult")->get_value_or_default(
                "1"
            )
        );
        
    if(load_resources) {
        //TODO don't use load_sample for these.
        sfx_dismiss =
            load_sample(file->get_child_by_name("dismiss_sfx")->value, mixer);
        sfx_name_call =
            load_sample(file->get_child_by_name("name_call_sfx")->value, mixer);
        sfx_whistle =
            load_sample(file->get_child_by_name("whistle_sfx")->value, mixer);
        bmp_icon =
            bitmaps.get(file->get_child_by_name("icon")->value, file);
    }
    
#define new_conversion(id, name) \
    anim_conversions->push_back(make_pair((id), (name)))
    
    new_conversion(LEADER_ANIM_IDLING,         "idling");
    new_conversion(LEADER_ANIM_WALKING,         "walking");
    new_conversion(LEADER_ANIM_PLUCKING,        "plucking");
    new_conversion(LEADER_ANIM_GETTING_UP,       "getting_up");
    new_conversion(LEADER_ANIM_DISMISSING,      "dismissing");
    new_conversion(LEADER_ANIM_THROWING,        "throwing");
    new_conversion(LEADER_ANIM_WHISTLING,    "whistling");
    new_conversion(LEADER_ANIM_LYING,          "lying");
    new_conversion(LEADER_ANIM_PAIN,         "pain");
    new_conversion(LEADER_ANIM_KNOCKED_DOWN, "knocked_down");
    new_conversion(LEADER_ANIM_SPRAYING,     "spraying");
    
#undef new_conversion
    
}
コード例 #6
0
ファイル: main.cpp プロジェクト: RitterRBC/Arduino
void showHumidTempSensor()
{
  ht_sensor->reset();
  float temperature = 0;
  ht_sensor->getTemperature(&temperature);
  //convert from C to F
  temperature = temperature*1.8 + 32;
  float humidity = 0;
  ht_sensor->getHumidity(&humidity);
  
  char buff[128];
  sprintf(buff, "Environment \r\n Temp:%sF    \r\n Humidity:%s%% \r\n          \r\n",f2s(temperature, 1), f2s(humidity, 1));
  Screen.print(buff);
}
コード例 #7
0
ファイル: application.cpp プロジェクト: Spartan190/vsxu
	void draw() {
	  dt = gui_t.dtime();
		gui_f_time += dt;
		gui_g_time += dt;

		float f_wait;
		bool run_always = false;
		f_wait = 1.0f/100.0f;
	  if (run_always || gui_f_time > f_wait)
	  {

      if (first) {
        start_engine();
        cl_server.set_command_lists(&internal_cmd_in,&internal_cmd_out);
        cl_server.start();
        first = false;
      }
      
      ++frame_count;

	    gui_fullscreen_fpstimer += gui_f_time;
	      current_fps = f2s(round(1.0f/gui_f_time),2);
	    if (gui_fullscreen_fpstimer > 1) {
	      vsx_string h = fpsstring + " @ "+ current_fps+ "fps";
	      gui_fullscreen_fpstimer = 0;
	    }

	  	gui_f_time = 0;

      glDepthMask(GL_TRUE);
      glClearColor(0.0f,0.0f,0.0f,1.0f);

      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
	    
      if (vxe) {
        vxe->process_message_queue(&internal_cmd_in,&internal_cmd_out);
        vxe->render();

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();											// Reset The Modelview Matrix
        glEnable(GL_BLEND);
        ++frame_counter;
        ++delta_frame_counter;
      }
    }
    pgv.iterations = -1;
    pgv.process_garbage();
	}
コード例 #8
0
ファイル: vsx_statelist.cpp プロジェクト: molton/vsxu
void vsx_statelist::dec_amp()
{
  (*state_iter).fx_level-=0.05f;
  if ((*state_iter).fx_level < 0.1f) (*state_iter).fx_level = 0.1f;
  vxe->set_amp((*state_iter).fx_level);
#if defined(__linux__)
  vsx_string fxlf = config_dir+"/"+(*state_iter).state_name_suffix.substr(visual_path.size()+1 , (*state_iter).state_name_suffix.size())+"_fx_level";
  FILE* fxfp = fopen( fxlf.c_str(), "w");
  if (fxfp)
  {
    fputs(f2s((*state_iter).fx_level).c_str(), fxfp);
    fclose(fxfp);
  }
#endif
  fx_alpha = 5.0f;
}
コード例 #9
0
void vsxu_assistant::toggle_size() {
  if (size_multiplier == 1.3f) {
    size_multiplier = 1.0f;
  } else
  if (size_multiplier == 1.0f) {
    size_multiplier = 0.8f;
  } else
  if (size_multiplier == 0.8f) {
    size_multiplier = 0.2f;
  } else
  if (size_multiplier == 0.2f)
  {
    size_multiplier = 1.3f;
  }
  printf("assistant size is now: %f\n",size_multiplier);
  configuration["assistant_size"] = f2s(size_multiplier);
  ((vsx_widget_desktop*)root)->save_configuration();
}
コード例 #10
0
ファイル: vsx_statelist.cpp プロジェクト: molton/vsxu
void vsx_statelist::inc_amp() 
{
  (*state_iter).fx_level+=0.05f;
  if ((*state_iter).fx_level > 16.0f) (*state_iter).fx_level = 16.0f;
#if defined(__linux__)
  vsx_string fxlf = config_dir+"/"+(*state_iter).state_name_suffix.substr(visual_path.size()+1 , (*state_iter).state_name_suffix.size())+"_fx_level";
#ifdef VSXU_DEBUG
  printf("fx level file: %s\n", fxlf.c_str() );
#endif
  FILE* fxfp = fopen( fxlf.c_str(), "w");
  if (fxfp)
  {
    fputs(f2s((*state_iter).fx_level).c_str(), fxfp);
    fclose(fxfp);
  }
#endif
  vxe->set_amp((*state_iter).fx_level);
  fx_alpha = 5.0f;
}
コード例 #11
0
ファイル: vsx_widget_timeline.cpp プロジェクト: Who828/vsxu
void vsx_widget_timeline::move_time(vsx_vector world) {
  if (owner->engine_status == VSX_ENGINE_STOPPED) {
    float f = (world.x+size.x/2)/(size.x);
    if (f < 0) f = 0;
    else
    if (f > 1) f = 1;
    float c_time = owner->tstart+f*(owner->tend - owner->tstart);
    if (c_time < 0) c_time = 0;

    float a = (c_time-owner->tstart)/(owner->tend-owner->tstart);
    //printf("a: %f\n",a);
    if (a > 0.95) {
      //dd_time = (0.001)*(owner->tend-owner->tstart);
      //owner->tend += dd_time;
      //owner->tstart += dd_time;
      //c_time = owner->tstart+(owner->tend-owner->tstart)*0.851;
      //owner->curtime + dd_time*2;
      auto_move_dir = 1;
      owner->update_time_from_engine = false;
      a_dist = a-0.95;
    } else
    if (a < 0.05) {
      //dd_time = (0.001)*(owner->tend-owner->tstart);
      //owner->tend -= dd_time;
      //owner->tstart -= dd_time;
      //c_time = owner->tstart+(owner->tend-owner->tstart)*0.149;
      auto_move_dir = -1;
      a_dist = 0.05-a;
      owner->update_time_from_engine = false;
    } else {
      auto_move_dir = 0;
      owner->curtime = c_time;
      command_q_b.add_raw("time_set "+f2s(owner->curtime));
      parent->vsx_command_queue_b(this);
      owner->update_time_from_engine = false;
    }
    //owner->check_timeline();
  } else {
    auto_move_dir = 0;
    owner->update_time_from_engine = true;
  }
}
コード例 #12
0
void vsx_window_object_inspector::vsx_command_process_b(vsx_command_s *t) {
  if (k_focus == component_rename_edit || t->cmd == "component_rename_button") {
    if (inspected->widget_type == VSX_WIDGET_TYPE_COMPONENT) {
      vsx_widget_component* cc = (vsx_widget_component*)inspected;
      vsx_string curname = "";
      vsx_string newname = "";
//      if (cc->parent_name != "") {
//        curname += cc->parent_name+".";
//        newname += cc->parent_name+".";
//      }
      newname += ((vsx_widget_base_edit*)component_rename_edit)->get_string();
      command_q_b.add_raw("component_rename " +cc->name+" "+newname);
      cc->server->vsx_command_queue_b(this);
    } else
    if (inspected->widget_type == VSX_WIDGET_TYPE_ANCHOR) {
      //printf("sending\n");
      command_q_b.add_raw(
        "pa_ren "+ // command
        ((vsx_widget_anchor*)inspected)->component->name+" "+ // component
        ((vsx_widget_anchor*)inspected)->name+" "+
        ((vsx_widget_base_edit*)component_rename_edit)->get_string()+" "+
        i2s(((vsx_widget_anchor*)inspected)->io)
      );
      ((vsx_widget_component*)((vsx_widget_anchor*)inspected)->component)->server->vsx_command_queue_b(this);
    }
  }
  if (t->cmd == "component_timing_ok")
  {
  	label2->title = vsx_string("run time:   ")+t->parts[2] + " seconds\noutput time:" + t->parts[3] + " seconds\n";
  	label2->title = label2->title + "% of total frame time: "+f2s( (s2f(t->parts[2])+s2f(t->parts[3]))*100.0f / s2f(t->parts[4]),3);

  }
  //if (t->cmd == "cancel") { visible = 0; return; }
  //if (((vsx_widget_2d_edit*)edit1)->value.str().size())
  //{
    //command_q_b.add(name,((vsx_widget_2d_edit*)edit1)->value.str());
    //parent->vsx_command_queue_b(this);
    //((vsx_widget_2d_edit*)edit1)->value.str("");
    //((vsx_widget_2d_edit*)edit1)->value.clear();
  //}
  //visible = 0;
}
コード例 #13
0
ファイル: SinmapSI.cpp プロジェクト: CI-WATER/TauDEM-LFS-Test
double f3s(double x1, double x2, double y1, double y2, double b1, 
           double b2, double z )
{
	double p;

	if (x2 < x1 || y2 < y1 || b2 < b1)
		{
	/*	cat("Bad input parameters, upper limits less than lower limits\n");
		p = NA; */
	/* cng - make a big number to be subtracted and yield ndv */
	/*  p = 1000.0 */
	  p = 1000.0;
	  }
	else if	(x1 < 0 || y1 < 0 || b1 < 0)
		{
	/* 	cat("Bad input parameters, Variables cannot be negative\n");
		p = NA; */
	  p = 1000.;
	  }
	else
		{
		if(y1 == y2 || b1 == b2)
			{  /* degenerate on y or b - reverts to additive convolution */
		p = f2s(x1,x2,y1*b1,y2*b2,z);
		}
		else
			{
		if(x2 == x1) 
    		{
		  p = fa(y1, y2, b1, b2, z - x1);
		  }
		else 
		  {
		  p = (fai(y1, y2, b1, b2, z - x1) - 
      			 fai(y1, y2, b1, b2, z - x2)) / (x2 - x1);
		  }
			}
		}
	return p;
}
コード例 #14
0
ファイル: application.cpp プロジェクト: rassilon/vsxu
bool app_draw(int id)
{
  if (id == 0) {
    my_draw.draw();
  } else
  {
    if (dual_monitor) {
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear Screen And Depth Buffer
      vxe->process_message_queue(&internal_cmd_in,&internal_cmd_out);
      vxe->render();
      glDisable(GL_DEPTH_TEST);

      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();											// Reset The Modelview Matrix
      glEnable(GL_BLEND);
      ++frame_counter;
      ++delta_frame_counter;
      float dt = time2.dtime();
      delta_frame_time+= dt;
      total_time += dt;
      if (delta_frame_counter == 100) {
        delta_fps = 100.0f/delta_frame_time;
        delta_frame_counter = 0;
        delta_frame_time = 0.0f;
      }
      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
      glColor4f(0,0,0,0.4f);
      glBegin(GL_QUADS);									// Draw A Quad
        glVertex3f(-1.0f, 1.0f, 0.0f);					// Top Left
        glVertex3f( 1.0f, 1.0f, 0.0f);					// Top Right
        glVertex3f( 1.0f,0.92f, 0.0f);					// Bottom Right
        glVertex3f(-1.0f,0.92f, 0.0f);					// Bottom Left
      glEnd();											// Done Drawing The Quad
      myf.print(vsx_vector(-1.0f,0.92f)," Fc "+i2s(frame_counter)+" Fps "+f2s(delta_fps)+" T "+f2s(total_time)+" Tfps "+f2s(frame_counter/total_time)+" MC "+i2s(vxe->get_num_modules())+" VSX Ultra (c) Vovoid",0.07);
    }
  }
  return true;
}
コード例 #15
0
ファイル: schwarz_screen.cpp プロジェクト: ValeevGroup/mpqc
double Qmatrix::operator()(int64_t a) const {
  return max_elem_in_row_[f2s(f2s_maps_[0], a)];
}
コード例 #16
0
ファイル: schwarz_screen.cpp プロジェクト: ValeevGroup/mpqc
double Qmatrix::operator()(int64_t a, int64_t b) const {
  return Q_(f2s(f2s_maps_[0], a), f2s(f2s_maps_[1], b));
}
コード例 #17
0
ファイル: Render.cpp プロジェクト: wao1201/ense470-helicopter
void Render::updateGamePlay()
{
	//Cow collision detection:
	if (Render::detectCollision(osg::BoundingSphere(cowTransform->getBound()), osg::BoundingSphere(tor1Tr->getBound())) && missileCollison==false)
	{
		missileCollison = true;
		ball1->setColor(osg::Vec4(0.0f,1.0f,0.0f,0.0f));
		Logger::getInstance()->log("Cow collision with ball #1");
		std::cout<<"Cow impacts ball #1\n";
	}
	if (Render::detectCollision(osg::BoundingSphere(cowTransform->getBound()), osg::BoundingSphere(tor2Tr->getBound())) && missileCollison==false)
	{
		missileCollison = true;
		ball2->setColor(osg::Vec4(0.0f,1.0f,0.0f,0.0f));
		Logger::getInstance()->log("Cow collision with ball #2");
		std::cout<<"Cow impacts ball #2\n";
	}
	if (Render::detectCollision(osg::BoundingSphere(cowTransform->getBound()), osg::BoundingSphere(tor3Tr->getBound())) && missileCollison==false)
	{
		missileCollison = true;
		ball3->setColor(osg::Vec4(0.0f,1.0f,0.0f,0.0f));
		Logger::getInstance()->log("Cow collision with ball #3");
		std::cout<<"Cow impacts ball #3\n";
	}

	if((cowPosition.z() < 0) && missileCollison==false)
	{  //these ones should be radius of ball
		missileCollison = true;
		std::cout<<"Cow impacts ground\n";
		Logger::getInstance()->log("Cow impacts ground\n");

	}


	if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor1Tr->getBound())))
	{
		ball1->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f));
		Logger::getInstance()->log("Collision with ball #1");
	}
	if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor2Tr->getBound())))
	{
		ball2->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f));
		Logger::getInstance()->log("Collision with ball #2");
	}
	if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor3Tr->getBound())))
	{
		ball3->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f));
		Logger::getInstance()->log("Collision with ball #3");
	}

	float frictionScalar;
	if(friction==true)
		frictionScalar = Constants::getInstance()->frictionConstant;//*sqrt(pow(modelVelocity.x(),2)+pow(modelVelocity.y(),2)+pow(modelVelocity.z(),2));
	else
		frictionScalar = 0;

	float mass = Constants::getInstance()->helicopter->mass;

	float axForce = (sin(osg::DegreesToRadians(helicopterOrientation.y_theta))*rotorForce)//magnitude of rotor initially this direction
					*cos(osg::DegreesToRadians(helicopterOrientation.z_theta))//transform for when heli turns
					+(sin(osg::DegreesToRadians(helicopterOrientation.x_theta))*rotorForce)//magnitude of rotor initially in other direction
					*sin(osg::DegreesToRadians(helicopterOrientation.z_theta))//transform for when heli turns
					- frictionScalar*modelVelocity.x();//friction portion
	float ayForce = -(((sin(osg::DegreesToRadians(helicopterOrientation.x_theta))*rotorForce)//same as for axForce
					*cos(osg::DegreesToRadians(helicopterOrientation.z_theta))
					+(sin(osg::DegreesToRadians(helicopterOrientation.y_theta))*rotorForce)
					*sin(osg::DegreesToRadians(helicopterOrientation.z_theta)))
					- frictionScalar*modelVelocity.y());
	float azForce = cos(osg::DegreesToRadians(helicopterOrientation.x_theta))*cos(osg::DegreesToRadians(helicopterOrientation.y_theta))*rotorForce + aGrav*mass - frictionScalar*modelVelocity.z();

	float xAcc = axForce/mass;
	float yAcc = ayForce/mass;
	float zAcc = azForce/mass;


	float delta = 0.0235; //viewer.getFrameStamp()->getReferenceTime() - last;

	last = viewer.getFrameStamp()->getReferenceTime();

	float xPos = modelPosition.x() + (modelVelocity.x()*delta) + (0.5)*xAcc*(pow(delta,2));
	float xVel = (modelVelocity.x() + xAcc*delta)*0.99999999999;

	float yPos = modelPosition.y() + (modelVelocity.y()*delta) + (0.5)*yAcc*(pow(delta,2));
	float yVel = (modelVelocity.y() + yAcc*delta)*0.99999999999;

	float zPos = modelPosition.z() + (modelVelocity.z()*delta) + (0.5)*zAcc*(pow(delta,2));
	float zVel = (modelVelocity.z() + zAcc*delta)*0.99999999999;

	if(zPos < 1){  //these ones should be radius of ball
		if(zVel < -3)//THIS VALUE IS SUBJECT TO CHANGE
		{
			crash=true;
			Logger::getInstance()->log("Collison with ground");
		}
		else
		{
			Logger::getInstance()->log("Successful landing");
		}

		zPos = 1;
		zVel *= 0;

	}

	hud.crashed(crash);


	Logger* logger = Logger::getInstance();
	string something = f2s(xPos);
	logger->log("X Pos: " + f2s(xPos) + " Y Pos: " + f2s(yPos) + " Z Pos: " + f2s(zPos)); 
	logger->log("X Vel: " + f2s(xVel) + " Y Vel: " + f2s(yVel) +" Z Vel: " + f2s(zVel));
	logger->log("X Acc: " + f2s(xAcc) + " Y Acc: " + f2s(yAcc) +" Z Acc: " + f2s(zAcc));
	logger->log("Throttle Position: " + f2s(rotorForce/Constants::getInstance()->baseThrottle));

	modelPosition.set(osg::Vec3d(xPos, yPos, zPos));
	modelVelocity.set(osg::Vec3f(xVel, yVel, zVel));
	helicopterTransform->setPosition(modelPosition);




	//m3: missile
	if(fire == true)
	{
		if(fireTimer==Constants::getInstance()->fireRate)
		{
			cowVelocity.set(osg::Vec3f((sin(osg::DegreesToRadians(helicopterOrientation.z_theta)))*Constants::getInstance()->missile->Airspeed + (modelVelocity.x()*delta),
										-((cos(osg::DegreesToRadians(helicopterOrientation.z_theta)))*Constants::getInstance()->missile->Airspeed + (modelVelocity.y()*delta)),
										(sin(-(osg::DegreesToRadians(helicopterOrientation.x_theta+5))))*Constants::getInstance()->missile->Airspeed + (-modelVelocity.z()*delta)));

			cowPosition.set(osg::Vec3d(cowPosition.x() + cowVelocity.x()*delta,cowPosition.y() + cowVelocity.y()*delta,cowPosition.z() + cowVelocity.z()*delta));

			cowTransform->setPosition(cowPosition);
		}
		if(fireTimer<=Constants::getInstance()->fireRate && fireTimer>0)
		{
			cowPosition.set(osg::Vec3d(cowPosition.x() + cowVelocity.x()*delta,cowPosition.y() + cowVelocity.y()*delta,cowPosition.z() + cowVelocity.z()*delta));

			cowTransform->setPosition(cowPosition);
		}

		fireTimer--;
		if(fireTimer<=0)
		{
			missileCollison = false;
			fireTimer=Constants::getInstance()->fireRate;
			fire=false;
		}
	}
	else
	{
		cowTransform->setPosition(modelPosition);
		cowPosition = modelPosition;
	}

	// orientation
	helicopterTransform->setAttitude( 	 	
		osg::Quat( 	 	
			osg::DegreesToRadians(90 + helicopterOrientation.x_theta),osg::Vec3f(1,0,0), 	 	
	        osg::DegreesToRadians(helicopterOrientation.y_theta),osg::Vec3f(0,1,0), 	 	
	        osg::DegreesToRadians(helicopterOrientation.z_theta),osg::Vec3f(0,0,1) 	 	
	        ) 	 	
	);
	
	// hud
	hud.updateText(xPos, yPos, zPos, xVel, yVel, zVel, xAcc, yAcc, zAcc, helicopterOrientation.x_theta , helicopterOrientation.y_theta, helicopterOrientation.z_theta, axForce, ayForce, azForce, cowVelocity.x(), cowVelocity.y(), cowVelocity.z(),helicopterOrientation.x_theta+5);
	
	if(ScriptRunner::getInstance()->getStatus()){ ScriptRunner::getInstance()->doCommand(); }
	
}
コード例 #18
0
ファイル: SinmapSI.cpp プロジェクト: CI-WATER/TauDEM-LFS-Test
/* function to compute stability index with potentially 
   uncertain parameters  for a specific grid cell */
double sindexcell(double s, double a, double c1, double c2, 
                  double t1, double t2, double x1, double x2, double r,
                  double *sat)
{
		/*  c1, c2  bounds on dimensionless cohesion
			t1,t2 bounds on friction angle
			x1,x2 bounds on wetness parameter q/T
			r Density ratio
			s slope angle
			a specific catchment area */

		double cs, ss, w1, w2, fs2, fs1, cdf1, cdf2, y1, y2, as, si;

		/* cng - added this to prevent division by zero */
		if (s == 0.0)
		{
		  *sat = 3.0;
		  return 10;
		}

		/*  DGT - The slope in the GIS grid file is the tangent of the angle  */
		s = atan(s);
		/*  t1 and t2 input as angle must be converted to tan  */
		t1 = tan(t1);
		t2 = tan(t2);

		cs = cos(s);
		ss = sin(s);

		if(x1 > x2)
		{  /*  Error these are wrong way round - switch them  */
			w1 = x2;   /*  Using w1 as a temp variable  */
			x2 = x1;
			x1 = w1;
		}
		/* Wetness is coded between 0 and 1.0 based on the lower T/q parameter 
		  (this is conservative).  If wetness based on lower T/q is > 1.0 and wetness based 
		  on upper T/q <1.0, then call it the "threshold saturation zone" and hard code it 
		  to 2.0.  Then if wetness based on upper T/q >1.0, then call it the 
		  "saturation zone" and hard code it to 3.0.  
		  Lower T/q correspounds to upper q/T = x = x2 ->  w2  */
		w2 = x2*a/ss;
		w1 = x1*a/ss;
		*sat = w2;
		if(w2 > 1.0)
		{
			w2 = 1.0;
			*sat = 2.0;
		}
		if(w1 > 1.0)
		{
			w1 = 1.0;
			*sat = 3.0;
		}
		
		fs2 = fs(s,w1,c2,t2,r);

		if (fs2 < 1)  /* always unstable */
		{
		si  =  0;
		}
		else
			{
				fs1 = fs(s,w2,c1,t1,r);
				if(fs1 >= 1) /*  Always stable */
				{
 					si  =  fs1;
				}
				else
					{
						if(w1 == 1) /* region 1 */
						{
							si = 1-f2s(c1/ss,c2/ss,cs*(1-r)/ss*t1,cs*(1-r)/ss*t2,1);
						}
						else
							{
								if(w2 == 1) /* region 2 */
								{
									as = a/ss;
									y1 = cs/ss*(1-r);
									y2 = cs/ss*(1-x1*as*r);
									cdf1 = (x2*as-1)/(x2*as-x1*as)*f2s(c1/ss,c2/ss,cs*(1-r)/ss*t1,cs*(1-r)/ss*t2,1);
									cdf2 = (1-x1*as)/(x2*as-x1*as)*f3s(c1/ss,c2/ss,y1,y2,t1,t2,1);
									si = 1-cdf1-cdf2;
								}
								else  /* region 3 */
									{
										as = a/ss;
										y1 = cs/ss*(1-x2*as*r);
										y2 = cs/ss*(1-x1*as*r);
										si = 1-f3s(c1/ss,c2/ss,y1,y2,t1,t2,1);
									}
							}
  					}
			}

		/* cng - need to limit the size spread for arcview since it has
		   difficulties with equal intervals over a large range of numbers */
		if (si > 10.0)
		  si = 10.0;

		return si;
}
コード例 #19
0
ファイル: vsx_widget_timeline.cpp プロジェクト: Who828/vsxu
void vsx_widget_timeline::i_draw() {
  parentpos = parent->get_pos_p();
	float time_diff = owner->tend - owner->tstart;
  totalsize = (owner->tend - owner->tstart);

  float y_mid = parentpos.y+pos.y;
  float y_size = size.y;
  if (a_focus == this) y_size *= 3.0f;
  float y_size_half = y_size * 0.5f;

  if (auto_move_dir) {
    //float c_time = owner->curtime;
    float curtime = owner->curtime + auto_move_dir*dtime*time_diff*10.0f*a_dist;//totalsize*0.01;
    float tstart = owner->tstart + auto_move_dir*dtime*time_diff*10.0f*a_dist;//totalsize*0.01;
    float tend = owner->tend + auto_move_dir*dtime*time_diff*10.0f*a_dist;//totalsize*0.01;
    if (curtime >= 0) {
      owner->curtime = curtime;
      owner->tstart = tstart;
      owner->tend = tend;
    }
    command_q_b.add_raw("time_set "+f2s(owner->curtime));
    parent->vsx_command_queue_b(this);
  }

 	glBegin(GL_QUADS);
    if (owner->tstart < 0) {
   	  glColor4f(0.4,0.3,0.3f,0.5f);
   	  ff = size.x*(fabs(owner->tstart)/totalsize);
  		glVertex2f(parentpos.x+pos.x-size.x*0.5f, y_mid+y_size_half);
  		glVertex2f(parentpos.x+pos.x-size.x*0.5f+ff, y_mid+y_size_half);
  		glVertex2f(parentpos.x+pos.x-size.x*0.5f+ff, y_mid-y_size_half);
  		glVertex2f(parentpos.x+pos.x-size.x*0.5f, y_mid-y_size_half);
      if (owner->tend > 0) {
    	  glColor4f(0.3,0.4,0.3,0.5f);
    		glVertex2f(parentpos.x+pos.x-size.x*0.5f+ff, y_mid+y_size_half);
    		glVertex2f(parentpos.x+pos.x+size.x*0.5f, y_mid+y_size_half);
    		glVertex2f(parentpos.x+pos.x+size.x*0.5f, y_mid-y_size_half);
    		glVertex2f(parentpos.x+pos.x-size.x*0.5f+ff, y_mid-y_size_half);
      }
    } else {
   	  glColor4f(0.3,0.4,0.3,0.5f);
  		glVertex2f(parentpos.x+pos.x-size.x*0.5f, y_mid+y_size_half);
  		glVertex2f(parentpos.x+pos.x+size.x*0.5f, y_mid+y_size_half);
  		glVertex2f(parentpos.x+pos.x+size.x*0.5f, y_mid-y_size_half);
  		glVertex2f(parentpos.x+pos.x-size.x*0.5f, y_mid-y_size_half);
    }
	glEnd();

  if (a_focus == this) {
 	  glColor3f(1.0f,1.0f,1.0f);
  } else
  glColor3f(0.5f,0.5f,0.5f);
  draw_box_border(vsx_vector(parentpos.x+pos.x-size.x*0.5,y_mid-y_size_half), vsx_vector(size.x,y_size), dragborder*0.5);

  levelstart = ((float)z_round(owner->tstart) - owner->tstart)/totalsize;
  //printf("levelstart: %f\n",levelstart);
  levelstart = 0;

  myf.color.a = 0.8f;

  float one_div_totalsize_times_sizex = 1.0f / totalsize * size.x;
	for (int i = (int)owner->tstart; i < (int)(owner->tend)+1; ++i)
	{
    glColor3f(0.5,0.5,0.5);
    float x =  (float)(i-owner->tstart) * one_div_totalsize_times_sizex;
    if (x > 0)
    {
      x += parentpos.x+pos.x - size.x*0.5f+levelstart*size.x;
      glBegin(GL_LINES);
        glVertex2f(x,y_mid+y_size*0.416666667f);
        glVertex2f(x,y_mid-y_size*0.416666667f);
      glEnd();
      myf.print_center(vsx_vector(x,y_mid), i2s(i),0.005);
    }
	}

  glColor3f(1,1,1);
  float f = ((owner->curtime-owner->tstart)/(owner->tend-owner->tstart))*size.x;
  glBegin(GL_LINES);
    glVertex2f(parentpos.x+pos.x-size.x*0.5f+f,y_mid+y_size*0.416666667);
    glVertex2f(parentpos.x+pos.x-size.x*0.5f+f,y_mid-y_size*0.416666667);
  glEnd();

  // ************************************************************
  // sound waveform display
	// ************************************************************
  if (show_wave_data)
  {
		vsx_widget_server* server = (vsx_widget_server*)owner->get_server();
		vsx_engine* engine = (vsx_engine*)(server->engine);

		if (engine->engine_info.param_float_arrays.size() >= 4 && a_focus == this)
		{
			vsx_engine_float_array *full_pcm_data_l;
			vsx_engine_float_array *full_pcm_data_r;
			full_pcm_data_l = engine->engine_info.param_float_arrays[2];
			full_pcm_data_r = engine->engine_info.param_float_arrays[3];
			if (full_pcm_data_l->array.size() > 0)
			{
				// assuming we have 44100 samples per second
				float x_start = parentpos.x+pos.x-size.x*0.5f;
				float x_end   = parentpos.x+pos.x+size.x*0.5f;
				float t_start = owner->tstart;
				float t_end = owner->tend;
				size_t data_end = (size_t) (t_end * 44100.0f);
				if (owner->tstart < 0)
				{
					x_start += fabs(t_start / (t_end - t_start)) * size.x;
					//data_end -= fabs(t_start) * 44100.0f;
					t_start = 0.0f;
				}
				size_t data_start = (size_t) (t_start * 44100.0f);

				size_t data_count = data_end - data_start;
				float x_dist = x_end - x_start;
				double x_diff = (double)x_dist / (double)data_count;

	//			printf("data_start: %d\n", data_start);
				//printf("data_end: %d\n", data_end);
				//printf("data_count: %d\n", data_count);

				glColor4f(1.0f,0.2f,0.2f,0.15f);
				double x_pos = x_start;
				glBegin(GL_LINE_STRIP);
					for (
								size_t i = data_start;
								i < data_end;
								i++
							)
					{
						glVertex2f(x_pos, y_mid + (*full_pcm_data_l).array[i] * y_size_half );
						x_pos += x_diff;
					}
				glEnd();


				glColor4f(0.2f,1.0f,0.2f,0.1f);
				x_pos = x_start;
				glBegin(GL_LINE_STRIP);
					for (
								size_t i = data_start;
								i < data_end;
								i++
							)
					{
						glVertex2f(x_pos, y_mid + (*full_pcm_data_r).array[i] * y_size_half );
						x_pos += x_diff;
					}
				glEnd();
			} // pcm data pool size
		}
  }

	vsx_widget::i_draw();
}
コード例 #20
0
ファイル: application.cpp プロジェクト: rassilon/vsxu
  void draw() {
    if (record_movie) {
      vxe->set_constant_frame_progression(1.0f / 60.0f);
      vxe->play();
    }

    if (desktop)
    {
      desktop->vsx_command_process_f();
    }

    if (first) {
      intro = new vsx_logo_intro;
    }
    dt = gui_t.dtime();
    gui_f_time += dt;
    gui_g_time += dt;

    float f_wait;
    bool run_always = false;
    if (desktop)
    {
      if (desktop->global_framerate_limit == -1)
      {
        run_always = true;
      }
      else
      {
        f_wait = 1.0f/desktop->global_framerate_limit;
      }
    }
    else
    {
      f_wait = 1.0f/100.0f;
    }

    if (run_always || gui_f_time > f_wait)
    {
      ++frame_count;

      if (desktop) {
        desktop->dtime = gui_f_time;
        desktop->time += desktop->dtime;
        desktop->frames = frame_count;
      }
      gui_fullscreen_fpstimer += gui_f_time;
      current_fps = f2s(round(1.0f/gui_f_time),2);
      if (gui_fullscreen_fpstimer > 1)
      {
        vsx_string h = fpsstring + " @ "+ current_fps+ "fps";
        gui_fullscreen_fpstimer = 0;
      }

      gui_f_time = 0;
      if (!*gui_prod_fullwindow)
      {
        if (desktop) {
          desktop->init_frame();
          desktop->draw();
          desktop->draw_2d();
        }
      }
      if (!dual_monitor)
      {
        vxe->process_message_queue(&internal_cmd_in,&internal_cmd_out);
      }

      if (*gui_prod_fullwindow)
      {

        glDepthMask(GL_TRUE);
        glClearColor(0.0f,0.0f,0.0f,1.0f);

        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

        #ifndef NO_INTRO
          if (vxe->e_state == VSX_ENGINE_STOPPED)
          {
            //intro->draw(true);
          }
        #endif
        if (vxe && !dual_monitor) {
          vxe->render();
          glDisable(GL_DEPTH_TEST);

          glMatrixMode(GL_PROJECTION);
          glLoadIdentity();
          glMatrixMode(GL_MODELVIEW);
          glLoadIdentity();
          glEnable(GL_BLEND);
          ++frame_counter;
          ++delta_frame_counter;

          delta_frame_time+= dt;
          total_time += dt;
          if (delta_frame_counter == 100) {
            delta_fps = 100.0f/delta_frame_time;
            delta_frame_counter = 0;
            delta_frame_time = 0.0f;
          }

          if (gui_prod_fullwindow_helptext)
          {
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
            glColor4f(0,0,0,0.4f);
            glBegin(GL_QUADS);                  // Draw A Quad
              glVertex3f(-1.0f, 1.0f, 0.0f);          // Top Left
              glVertex3f( 1.0f, 1.0f, 0.0f);          // Top Right
              glVertex3f( 1.0f,0.92f, 0.0f);          // Bottom Right
              glVertex3f(-1.0f,0.92f, 0.0f);          // Bottom Left
            glEnd();                      // Done Drawing The Quad
            myf.print(vsx_vector(-1.0f,0.92f)," Fc "+i2s(frame_counter)+" Fps "+f2s(delta_fps)+" T "+f2s(total_time)+" Tfps "+f2s(frame_counter/total_time)+" MC "+i2s(vxe->get_num_modules())+" VSX Ultra (c) 2003-2010 Vovoid - Alt+T=toggle this text, Ctrl+Alt+P=screenshot (data dir), Alt+F=performance mode ",0.03f);
          }
        }
        if (desktop && desktop->performance_mode) {
          glClear(GL_DEPTH_BUFFER_BIT);
          desktop->init_frame();
          desktop->draw();
          desktop->draw_2d();
        }
      }
      #ifndef NO_INTRO
        //intro->draw();
      #endif
      if (!first && !desktop)
      {
        pgv.iterations = -1;
      }
      pgv.process_garbage();
      if (first)
      {
        if (!dual_monitor) {
          vxe->init();
          vxe->start();
        }
        load_desktop_a();
        first = false;
      }
    } else
    {
      int zz = (int)((f_wait-gui_f_time)*1000.0f);
      if (zz < 0) zz = 0;
      //printf("zz%d ",zz);
      //Sleep(zz);
    }
    //------------------------------------------------------------------
    // movie recording
    //------------------------------------------------------------------
    if (record_movie)
    {
      GLint viewport[4];
      glGetIntegerv(GL_VIEWPORT, viewport);
      char* pixeldata = (char*)malloc( viewport[2] * viewport[3] * 3 );
      char* pixeldata_flipped = (char*)malloc( viewport[2] * viewport[3] * 3 );
      take_screenshot = false;
      glReadPixels(0,0,viewport[2],viewport[3],GL_RGB,GL_UNSIGNED_BYTE, (GLvoid*)pixeldata);
      int x3 = viewport[2]*3;
      int hi = viewport[3];
      for (int y = 0; y < hi; y++)
      {
        for (int x = 0; x < x3; x++)
        {
          pixeldata_flipped[y*x3+x] = pixeldata[ (hi-y)*x3+x];
        }
      }

      CJPEGTest jpeg;
      jpeg.m_nResX = viewport[2];
      jpeg.m_nResY = viewport[3];
      jpeg.m_pBuf = (unsigned char*)pixeldata_flipped;

      //char filename[32768];
      #if PLATFORM_FAMILY == PLATFORM_FAMILY_UNIX
      if (access((vsx_get_data_path()+"videos").c_str(),0) != 0) mkdir((vsx_get_data_path()+"/videos").c_str(),0700);
        //sprintf(filename, "%sscreenshots/%d_%d_%d_rgb.jpg",vsx_get_data_path().c_str(),(int)time(0),viewport[2],viewport[3]);
      #endif
      vsx_string err;
      char mfilename[32];
      sprintf(mfilename, "%05d", movie_frame_count);

      jpeg.SaveJPEG( vsx_get_data_path()+"videos"+DIRECTORY_SEPARATOR+vsx_string(mfilename)+"_"+ i2s(viewport[2]) + "_" + i2s(viewport[3])+".jpg", err, 100 );
      jpeg.m_pBuf = 0;
      free(pixeldata);
      free(pixeldata_flipped);
      movie_frame_count++;
    }

    //------------------------------------------------------------------
    // screenshots
    //------------------------------------------------------------------

    if (take_screenshot)
    {
      GLint viewport[4];
      glGetIntegerv(GL_VIEWPORT, viewport);
      char* pixeldata = (char*)malloc( viewport[2] * viewport[3] * 3 );
      char* pixeldata_flipped = (char*)malloc( viewport[2] * viewport[3] * 3 );
      take_screenshot = false;
      glReadPixels(0,0,viewport[2],viewport[3],GL_RGB,GL_UNSIGNED_BYTE, (GLvoid*)pixeldata);

      int x3 = viewport[2]*3;
      int hi = viewport[3];
      for (int y = 0; y < hi; y++)
      {
        for (int x = 0; x < x3; x++)
        {
          pixeldata_flipped[y*x3+x] = pixeldata[ (hi-y)*x3+x];
        }
      }

      CJPEGTest jpeg;
      jpeg.m_nResX = viewport[2];
      jpeg.m_nResY = viewport[3];
      jpeg.m_pBuf = (unsigned char*)pixeldata_flipped;

      //char filename[32768];
      #if PLATFORM_FAMILY == PLATFORM_FAMILY_UNIX
      if (access((vsx_get_data_path()+"screenshots").c_str(),0) != 0) mkdir((vsx_get_data_path()+"/screenshots").c_str(),0700);
        //sprintf(filename, "%sscreenshots/%d_%d_%d_rgb.jpg",vsx_get_data_path().c_str(),(int)time(0),viewport[2],viewport[3]);
      #endif
      /*FILE* fp = fopen(filename,"wb");
      fwrite(pixeldata_flipped, 1, viewport[2] * viewport[3] * 3, fp);
      fclose(fp);*/
      vsx_string err;
      jpeg.SaveJPEG( vsx_get_data_path()+"screenshots"+DIRECTORY_SEPARATOR+i2s(time(0))+"_"+ i2s(viewport[2]) + "_" + i2s(viewport[3])+".jpg", err, 100 );
      jpeg.m_pBuf = 0;
      free(pixeldata);
      free(pixeldata_flipped);
    }
  } // ::draw()
コード例 #21
0
void Render::updateGamePlay()
{
	if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor1Tr->getBound())))
	{
		ball1->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f));
		Logger::getInstance()->log("Collision with ball #1");
	}
	if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor2Tr->getBound())))
	{
		ball2->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f));
		Logger::getInstance()->log("Collision with ball #2");
	}
	if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor3Tr->getBound())))
	{
		ball3->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f));
		Logger::getInstance()->log("Collision with ball #3");
	}

	float frictionScalar = Constants::getInstance()->frictionConstant*sqrt(pow(modelVelocity.x(),2)+pow(modelVelocity.y(),2)+pow(modelVelocity.z(),2));
	float mass = Constants::getInstance()->helicopter->mass;

	float axForce = helicopterThrust.x() - frictionScalar*modelVelocity.x();
	float ayForce = helicopterThrust.y() - frictionScalar*modelVelocity.y();
	float azForce = aGrav*mass + helicopterThrust.z() - frictionScalar*modelVelocity.z();

	float xAcc = axForce/mass;
	float yAcc = ayForce/mass;
	float zAcc = azForce/mass;

	float delta = viewer.getFrameStamp()->getReferenceTime() - last;
	last = viewer.getFrameStamp()->getReferenceTime();

	float xPos = modelPosition.x() + (modelVelocity.x()*delta) + (0.5)*xAcc*(pow(delta,2));
	float xVel = (modelVelocity.x() + xAcc*delta)*0.99999999999;

	float yPos = modelPosition.y() + (modelVelocity.y()*delta) + (0.5)*yAcc*(pow(delta,2));
	float yVel = (modelVelocity.y() + yAcc*delta)*0.99999999999;

	float zPos = modelPosition.z() + (modelVelocity.z()*delta) + (0.5)*zAcc*(pow(delta,2));
	float zVel = (modelVelocity.z() + zAcc*delta)*0.99999999999;

	if(zPos < 1){  //these ones should be radius of ball
		zPos = 1;
		zVel *= 0.8;
		zVel = -zVel;
	}
	Logger* logger = Logger::getInstance();
	string something = f2s(xPos);
	logger->log("X Pos: " + f2s(xPos) + " Y Pos: " + f2s(yPos) + " Z Pos: " + f2s(zPos)); 
	logger->log("X Vel: " + f2s(xVel) + " Y Vel: " + f2s(yVel) +" Z Vel: " + f2s(zVel));
	logger->log("X Acc: " + f2s(xAcc) + " Y Acc: " + f2s(yAcc) +" Z Acc: " + f2s(zAcc));
	logger->log("Throttle Position: " + f2s(rotorForce/Constants::getInstance()->baseThrottle));
	modelPosition.set(osg::Vec3d(xPos, yPos, zPos));
	modelVelocity.set(osg::Vec3f(xVel, yVel, zVel));
	helicopterTransform->setPosition(modelPosition); 
	if(ScriptRunner::getInstance()->getStatus()){ ScriptRunner::getInstance()->doCommand(); }
	
}