利用linux gtk模拟运动小球的轨迹.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用linux gtk模拟运动小球的轨迹

背景说明 利用linux gtk编写c/c++程序,模拟小球在sin/cos曲线上进行运动的轨迹。 源码 /* * cairo.cpp * * Created on: Jan 5, 2011 * Author: sjetlin */ #include gtk/gtk.h #include math.h #include stdio.h //--------------------------------------- double sin_start_x = 0;//sin水平坐标系原点x坐标 double cos_start_x = 0; double sin_start_y = 75; double cos_start_y = 225; double sin_ball_x = 0;//sin小球圆心坐标 double cos_ball_x = 0; //--------------------------------------- double sin_ball_speed_rad;//sin小球每次移动的弧度 double cos_ball_speed_rad; double round_time;//sin和cos曲线周期,单位是M_PI //--------------------------------------- double amplitude = 50;//曲线振幅 double width;//水平坐标系包含的像素点,设置与窗口宽度相等 double width_rad = 8 * M_PI;//水平坐标系表示的弧度,默认为8M_PI //--------------------------------------- void clicked(GtkWidget *widget, GdkEventExpose *event, gpointer data); void sin_wave(cairo_t *cr);//画sin曲线 void cos_wave(cairo_t *cr);//画sin小球 void sin_ball(cairo_t *cr);//画cos曲线 void cos_ball(cairo_t *cr);//画cos小球 //-------------------------------------- //static gboolean on_expose_event(GtkWidget *widget,GdkEventExpose *event,gpointer data) void clicked(GtkWidget *widget, GdkEventExpose *event, gpointer data) { cairo_t* cr = (cairo_t*)data; width = widget-allocation.width; while (sin_ball_x = width || cos_ball_x = width) { //当两个小球都在运动时改变画布内容 cairo_set_source_rgb(cr, 255, 255, 255); cairo_rectangle(cr, 0, 0, 400, 300); cairo_fill (cr);//清空画布 cairo_set_source_rgb(cr, 255, 0, 0);//设置画笔为红色 cairo_set_line_width(cr, 0.7);//设置画笔宽度 sin_wave(cr); sin_ball(cr); cos_wave(cr); cos_ball(cr); cairo_stroke(cr); g_usleep(0.5 * 1000000);//暂停0.5秒 } } void sin_wave(cairo_t *cr) { cairo_move_to(cr, sin_start_x, sin_start_y); cairo_line_to(cr, width, sin_start_y);//画sin水平坐标系 cairo_select_font_face(cr, Georgis, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size(cr, 12); cairo_move_to(cr, sin_start_x, sin_start_y); cairo_show_text(cr, 0); cairo_move_to(cr, sin_start_x + width - 30, sin_sta

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档