- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 2025最新高级生命支持(ACLS)理论考核试题及答案.docx VIP
- T∕CCSAS 001-2018 危险与可操作性分析质量控制与审查导则.pdf
- 07J912-1变配电所图集.pdf VIP
- 基于PLC控制的小车自动化送料系统设计(毕业论文).doc VIP
- 2025北京海淀高一(下)期末数学试卷含答案.pdf VIP
- 中国社会的不婚现象:现实与潜在影响探讨.docx VIP
- 2025最新高级生命支持(ACLS)理论考核试题和答案.docx
- 5.2《稻》《作酢法》+二则(知识清单)-【中职专用】高二语文(高教版2023拓展模块下册).docx VIP
- 2025年非车险考试题 .pdf VIP
- GB50016-2014 建筑设计防火规范(2018年版).docx
文档评论(0)