![利用linux gtk模擬運動小球的軌跡_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/3b5e2e35-8f19-4d8e-9d53-10f354da982d/3b5e2e35-8f19-4d8e-9d53-10f354da982d1.gif)
![利用linux gtk模擬運動小球的軌跡_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/3b5e2e35-8f19-4d8e-9d53-10f354da982d/3b5e2e35-8f19-4d8e-9d53-10f354da982d2.gif)
![利用linux gtk模擬運動小球的軌跡_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/3b5e2e35-8f19-4d8e-9d53-10f354da982d/3b5e2e35-8f19-4d8e-9d53-10f354da982d3.gif)
![利用linux gtk模擬運動小球的軌跡_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/3b5e2e35-8f19-4d8e-9d53-10f354da982d/3b5e2e35-8f19-4d8e-9d53-10f354da982d4.gif)
![利用linux gtk模擬運動小球的軌跡_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/3b5e2e35-8f19-4d8e-9d53-10f354da982d/3b5e2e35-8f19-4d8e-9d53-10f354da982d5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 背景說明利用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;do
2、uble 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 *widge
3、t, 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, Gd
4、kEventExpose *event, gpointer data)cairo_t* cr = (cairo_t*)data;width = widget->allocation.width;while (sin_ball_x <= width | cos_ball_x <= width) /當兩個小球都在運動時改變畫布內(nèi)容cairo_set_source_rgb(cr, 255, 255, 255);cairo_rectangle(cr, 0, 0, 400, 300);cairo_fill (cr);/清空畫布cairo_set_source_rgb(cr, 255,
5、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, &quo
6、t;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_start_y);cairo_show_text(cr, "8 PI");cairo_move_to(cr, sin_start_x, si
7、n_start_y);/曲線起點double x = sin_start_x;double inc_x = 1;while (x <= width)double next_x = x + inc_x;cairo_line_to(cr, x + inc_x, sin_start_y - amplitude * sin(2* width_rad * next_x / round_time / width);x = x + inc_x;void cos_wave(cairo_t *cr)cairo_move_to(cr, cos_start_x, cos_start_y);cairo_line
8、_to(cr, width, cos_start_y);/畫cos水平坐標系cairo_select_font_face(cr, "Georgis", CAIRO_FONT_SLANT_NORMAL,CAIRO_FONT_WEIGHT_BOLD);cairo_set_font_size(cr, 12);cairo_move_to(cr, cos_start_x, cos_start_y);cairo_show_text(cr, "0");cairo_move_to(cr, cos_start_x + width - 30, cos_start_y);ca
9、iro_show_text(cr, "8 PI");cairo_move_to(cr, cos_start_x, cos_start_y - 50);/曲線起點double x = cos_start_x;double inc_x = 1;while (x <= width)double next_x = x + inc_x;cairo_line_to(cr, next_x, cos_start_y - amplitude * cos(2 * width_rad* next_x / round_time / width);x = x + inc_x;void sin_
10、ball(cairo_t *cr)if (sin_ball_x <= width)double sin_ball_radius = 10;double sin_ball_y = sin_start_y - amplitude * sin(2 * width_rad* sin_ball_x / round_time / width);cairo_move_to(cr, sin_ball_x + sin_ball_radius, sin_ball_y);cairo_arc(cr, sin_ball_x, sin_ball_y, sin_ball_radius, 0, 2 * M_PI);si
11、n_ball_x = sin_ball_x + sin_ball_speed_rad *M_PI*width/ width_rad;void cos_ball(cairo_t *cr)if (cos_ball_x <= width)double cos_ball_radius = 10;double cos_ball_y = cos_start_y - amplitude * cos(2 * width_rad* cos_ball_x / round_time / width);cairo_move_to(cr, cos_ball_x + cos_ball_radius, cos_bal
12、l_y);cairo_arc(cr, cos_ball_x, cos_ball_y, cos_ball_radius, 0, 2 * M_PI);cos_ball_x = cos_ball_x + cos_ball_speed_rad *M_PI*width/ width_rad;int main(int argc, char *argv)printf("請輸入一個實數(shù),代表曲線周期,單位是PI n");scanf("%lf", &round_time);printf("請輸入一個實數(shù),代表第一個小球移動的弧度,單位是PI n"
13、;);scanf("%lf", &sin_ball_speed_rad);printf("請輸入一個實數(shù),代表第二個小球移動的弧度,單位是PI n");scanf("%lf", &cos_ball_speed_rad);printf("n已生成窗口,點擊窗口中的空白區(qū)域即可查看動畫nn");gtk_init(&argc, &argv);GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_titl
14、e(GTK_WINDOW(window), "sin cos && ball");gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);gtk_widget_set_app_paintable(window, TRUE);gtk_widget_show_all(window);cairo_t *cr = gdk_cairo_create(window->window
15、);/創(chuàng)建畫布gtk_widget_add_events(window,GDK_BUTTON_PRESS_MASK);g_signal_connect(window, "button-press-event", G_CALLBACK(clicked), cr);/注冊點擊事件g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);gtk_main();return 0;源碼說明1. 編程和編譯環(huán)境:Linux + Eclipse + CDT,文件名sport.c,可執(zhí)行文件
16、sport2. 程序運行時需輸入3個變量,分別是曲線周期、sin小球運動速度、cos小球運動速度3. 程序的設計思想是先創(chuàng)建一塊畫布,畫布的內(nèi)容在小球運動時動態(tài)改變,直至兩小球都運動到終點時停止。4. 小球運動時畫布改變順序如下: 先用一塊白布將畫布上的所有內(nèi)容抹掉 用一根紅筆畫出sin曲線、cos曲線、sin小球、cos小球5. 當畫布上的內(nèi)容更新一次時暫停0.5秒,時間到時重復4的步驟,此時曲線不變,小球的圓心改變。6. 畫sin曲線時先畫出x軸,標出起終點的水平坐標(08PI),該曲線眾多的點和小線段組成,點是經(jīng)過精確計算的在sin曲線上的點,而線段則由這些點連接起來,并最終匯總成為一條曲線。7. 畫移動的小球時,小球每次移動的弧度由鍵盤輸入,將該弧度轉(zhuǎn)換為轉(zhuǎn)化水平像素點,再加上上一個圓心的x坐標,即可確定出目前小球圓心所在的x坐標,取該x坐標對應于曲線上的一點作為小球的圓心。運行截圖1. 進入文件目錄2. 編譯3. 執(zhí)行 首先,程序會給出輸入提示信息,輸入相應信息
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京市房屋租賃合同范本
- 上海公寓出租合同范例
- 供熱合同范例封皮
- 2025年垃圾發(fā)電機項目可行性研究報告
- 豫劇樂隊伴奏十字訣
- 分期付合同范例
- 刷白合同范本
- 公司車輛洗車合同范本
- 代理辦理抵押合同范本
- 2025年白影貼面板項目投資可行性研究分析報告
- 部編人教版八年級語文下冊全冊課件
- 新起點英語二年級下冊全冊教案
- 《紅星照耀中國》整本書閱讀教學設計-統(tǒng)編版語文八年級上冊
- 【幼兒園戶外體育活動材料投放的現(xiàn)狀調(diào)查報告(定量論文)8700字】
- 帶狀皰疹與帶狀皰疹后遺神經(jīng)痛(HZ與PHN)
- JC-T 746-2023 混凝土瓦標準規(guī)范
- 漢密爾頓抑郁和焦慮量表
- 前列腺癌的診斷與治療
- 人教版八年級數(shù)學初中數(shù)學《平行四邊形》單元教材教學分析
- EPC項目設計及施工的配合
- 年產(chǎn)5萬噸1,4-丁二醇的工藝流程設計
評論
0/150
提交評論