Teân ñeà taøi XAÂY DÖÏNG BOÅ SUNG CHO 9 BAØI THÍ NGHIEÄM VAÄT LYÙ ÑAÏI CÖÔNG 1 LỜI CẢM ƠN Chúng tôi xin gửi đến các bạn đồng nghiệp lời cảm ơn sâu sắc vì đã cố vấn và giúp đỡ chúng tôi trong quá trình[.]
1 LỜI CẢM ƠN Chúng xin gửi đến bạn đồng nghiệp lời cảm ơn sâu sắc cố vấn giúp đỡ chúng tơi q trình thực đề tài MỤC LỤC LỜI CẢM ƠN - MỤC LỤC - PHẦN MỞ ĐẦU Đặt vấn đề Mục tiêu phạm vi nghiên cứu 3 Nội dung phương phương pháp nghiên cứu CHƢƠNG TỔNG QUAN - 1.1 Động lượng chất điểm .5 1.1.1 Định nghĩa ý nghĩa vật lý 1.1.2 Định lý 1.1.3 Hệ .6 1.2 Động lượng hệ chất điểm .6 1.2.1 Khối tâm C hệ chất điểm 1.2.2 Động lượng hệ chất điểm 1.2.3 Định luật bảo toàn động lượng hệ chất điểm 1.3 Các thí dụ va chạm kinh điển 1.4 Ánh sáng màu sắc 10 1.4.1 Hệ thống màu RGB .10 1.4.2 Hệ thống màu HSI 12 1.5 Các hệ thống xử lý ảnh nghiệm định luật bảo toàn động lượng 13 CHƢƠNG THỰC NGHIỆM, KẾT QUẢ VÀ BÀN LUẬN - 15 2.1 2.2 2.3 2.4 2.5 2.6 Dụng cụ thiết bị 15 Xây dựng thuật tốn cho chương trình 17 Visual studio 2010 19 Giao diện chương trình 22 Thực nghiệm kết 23 Bàn luận 25 CHƢƠNG KẾT LUẬN 26 TÀI LIỆU THAM KHẢO 27 PHỤ LỤC 28 PHẦN MỞ ĐẦU Đặt vấn đề Định luật bảo toàn động lượng nút chuỗi định luật bảo tồn quan trọng vật lý Nó cho biết cách định lượng truyền chuyển động trình tương tác vật Định luật bảo toàn động lượng phát biểu sau: “Trong hệ chất điểm cô lập, tổng động lượng hệ chất điểm không đổi” N p i 1 i const Có nhiều phương pháp kiểm nghiệm định luật như: sử dụng kế điện tử kết hợp với cảm biến vị trí Khuyết điểm phương pháp không hiển thị trực tiếp động lượng vật Ở đây, đề nghị phương pháp kiểm nghiệm định luật xử lý ảnh Phương pháp dùng máy tính webcam để ghi nhận q trình chuyển động Sau dùng kỹ thuật xử lý ảnh tính tốn vận tốc động lượng hai động tử, hiển thị kết lên máy tính Ưu điểm phương pháp sử dụng thiết bị đơn giản phổ biến, cho kết rõ ràng dễ sử dụng Mục tiêu phạm vi nghiên cứu Mục tiêu đề tài sử dụng webcam thu nhận ảnh trình chuyển động động tử Xác định vị trí qua màu sắc cờ gắn động tử Từ tính vận tốc chuyển động: v s t Trong đó: v: vận tốc s: quãng đường t: thời gian thực Phần thử nghiệm đánh giá kết quả: so sánh kết với phương pháp cũ Nội dung phƣơng pháp nghiên cứu Nội dung nghiên cứu: Tìm hiểu Microsoft Visual Studio 2010 Nghiên cứu giải thuật xử lý ảnh để đo vận tốc động tử Từ suy động lượng Thử nghiệm kết mơ hình thí nghiệm Tổng hợp báo cáo kết Phương pháp nghiên cứu: Tư kết hợp thực nghiệm CHƢƠNG TỔNG QUAN 1.1 Động lƣợng chất điểm 1.1.1 Định nghĩa ý nghĩa vật lý 1.1.1.1 Định nghĩa p mv hay p px i p y j pz k mvx i mvy j mvz k (1.1a) Trong đó: p động lượng chất điểm, đơn vị SI [kg.m/s]; px , p y , pz ba độ lớn đại số (hay thành phần) động lượng chất điểm theo ba hướng i , j , k vng góc m khối lượng chất điểm, đơn vị SI [kg] v vận tốc chất điểm, đơn vị SI [m/s] 1.1.1.2 Ý nghĩa vật lý: Là đại lượng véctơ đặc trưng cho truyền chuyển động tương tác, có: ─ Phương phương vận tốc; ─ Hướng hướng vận tốc; ─ Độ lớn: p px2 p y2 pz2 hay (1.1b) p mv (1.1c) ─ Điểm đặt chất điểm 1.1.2 Định lý dp F , nghĩa “Tốc độ thay đổi động lượng chất điểm tỉ lệ thuận dt với hợp lực tác dụng lên chất điểm có hướng hướng hợp lực này.” (1.2) Ghi chú: Dẫn (1.2), cách lấy vi phân hai vế (1.1a) theo thời gian kết hợp với F ma , nhận được: dp d mv dm dv dm v m v ma Trong dt dt dt dt dt đó: số hạng thứ hai vế phải có thứ ngun lực (kg.m/s2=N), cịn số hạng thứ có thứ nguyên lực (kg/s.m/s= kg.m/s2=N), dẫn đến vế phải có thứ nguyên lực dp F dt Phương trình (1.2) định luật Newton thứ hai tổng quát cho chuyển động mộtchất điểm mà Newton phát biểu Thật vậy, đưa (1.2) F ma sau: dp d mv dv dm m Const m v F ma , kết sử dụng dt dt dt dt F khối lượng chất điểm khơng đổi q trình chuyển động 1.1.3 Hệ 1.1.3.1 Hệ t p p0 Fdt , nghĩa “Độ biến thiên động lượng chất điểm tỉ lệ t0 với xung lực tác dụng lên chất điểm thời khoảng biến thiên này.” (1.3) 1.1.3.2 Hệ Nếu F p Const , nghĩa động lượng chất điểm bảo toàn (1.4) 1.2 Động lƣợng hệ chất điểm 1.2.1 Khối tâm C hệ chất điểm ─ Đối với hệ phân bố rời rạc mặt phẳng tọa độ xy (mặt tờ giấy): N RC m r i i i 1 M N N mi xi mi y i RC i 1 ; i 1 M M (1.5a) Trong đó: N M mi tổng khối lượng hệ; i 1 RC véctơ vị trí khối tâm C; ri véctơ vị trí chất điểm thứ i có khối lượng mi ─ Đối với hệ phân bố liên tục mặt phẳng tọa độ xy (mặt tờ giấy): RC r dm (Heä) M xdm ydm (Heä) (Heä) RC ; M M (1.5b) Trong đó: M dm tổng khối lượng vật rắn; (Hệ) RC véctơ vị trí khối tâm C; r véctơ vị trí chất điểm có khối lượng nguyên tố dm 1.2.2 Động lƣợng hệ chất điểm ─ Vận tốc khối tâm C suy từ phương trình (1.5): N d RC VC dt VC m v i 1 i i M vdm d RC (Heä) dt M (Cho hệ chất điểm) (1.6a) (Cho vật rắn) (1.6b) ─ Động lượng khối tâm C suy từ phương trình (1.6), động lượng hệ chất điểm: N PC pi (1.7) i 1 Trong đó: PC MVC động lượng khối tâm C hệ chũng tổng động lượng chất điểm hệ, [kg.m/s] (1.8) pi mi vi động lượng chất điểm thứ i hệ, [kg.m/s] (1.9) 1.2.3 Định luật bảo toàn động lƣợng hệ chất điểm ─ Gia tốc khối tâm C suy từ phương trình (1.6): N dV AC C dt AC m a i 1 i i M adm dVC (Heä) dt M (Cho hệ chất điểm) (1.10a) (Cho vật rắn) (1.10b) ─ Phương trình động lực học cho khối tâm C hệ chất điểm, suy từ phương trình (1.10) (1.11) FC M AC Trong đó: N M mi tổng khối lượng mi chất điểm cấu thành hệ, [kg] i 1 AC gia tốc khối tâm C hệ, [m/s ] FC hợp lực đặt khối tâm C hệ, [N] ─ Bây giờ, dẫn phương trình động lực học cho khối tâm C dạng động lượng mà dựa vào dẫn định luật bảo toàn động lượng cho khối tâm C, cách thức dẫn (1.4) từ (1.2) Nếu khối lượng hệ không đổi, gọi “hệ kín” từ phương trình (1.11) (1.8), suy ra: FC d PC , FC hợp lực đặt khối tâm C hệ dt (1.12) ─ Từ đây, nhận thấy rằng: hợp lực tác dụng lên khối tâm C hệ chất điểm khơng , gọi “hệ lập” (1.13) PC Const Đây định luật bảo toàn động lượng cho khối tâm C hệ Đến đây, đạt mục tiêu định luật bảo toàn động lượng cho hệ, lưu ý đến (1.7) (1.9) phương trình (1.13) viết lại sau: N pi Const hay i 1 N m v i 1 i i Const (1.14) Phương trình (1.14) phát biểu sau: “Trong hệ kín (khối lượng hệ khơng đổi) lập (tổng ngoại lực tác dụng lên hệ không), tổng động lượng chất điểm hệ không đổi” Đây định luật bảo tồn động lượng hệ chất điểm, định luật tổng quát so với học Newton, cho điện tử chất điểm nguyên tử thường dễ đạt tốc độ gần tốc độ ánh sáng chân không Ghi chú: Vì phương trình (1.12) phương trình véctơ, tương đương với ba phương trình vơ hướng theo ba phương hệ trục tọa độ vng góc, nên lực tác dụng theo phương khơng động lượng hệ bảo toàn theo phương hai phương cịn lại động lượng hệ khơng bảo tồn 1.3 Các thí dụ va chạm kinh điển ─ Thí dụ Mỗi viên đạn có khối lượng m=3,8g bắn theo phương nằm ngang với tốc độ v=1100m/s vào khối gỗ lớn có khối lượng M=12kg nằm yên mặt phẳng không ma sát Nếu khối gỗ nhận tám viên đạn tốc độ khối gỗ bao nhiêu? Hình 1.1 Giải Chọn gốc tọa độ x khối tâm khối gỗ nằm yên mặt phẳng, hướng dương trục x chiều chuyển động viên đạn, xem hình bên Vì lực xuất viên chạm vào khối gỗ nội lực khơng có ngoại lực tác dụng vào hệ nên áp dụng phương trình (1.14) cho hệ gồm tám viên đạn khối gỗ trường hợp chuyển động chiều theo phương x: , với n=8 số viên đạn ghim vào khối gỗ, D ký hiệu đạn, G ký npD pG pnDG hiệu khối gỗ hay npD pG pnDG npDx pGx pnDGx mvD 8m M V , với V’ vận tốc khối gỗ chứa tám viên đạn sau chúng ghim hết vào V 3,8.103 kg 8m vD 1100m / s 2,8m / s 8m M 12kg 3,8.103 kg Vậy tốc độ khối gỗ sau tám viên đạn ghim vào 2,8m/s ─ Thí dụ Một pháo đặt dừa có khối lượng M nằm yên mặt sàn không ma sát Pháo nổ làm dừa tách thành ba mảnh trượt sàn Hình 1.2 (a) nhìn từ xuống, mảnh B có khối lượng 0.2M, mảnh C có khối lượng 0.3M tốc độ vC 5m / s (dấu nháy cho biết tốc độ mảnh sau nổ) Hỏi tốc độ mảnh A mảnh B bao nhiêu? Hình 1.2 Giải Chọn gốc tọa độ xy khối tâm dừa nằm yên mặt sàn, hướng dương trục x hướng dương trục y, xem hình bên (b) Vì lực xuất nổ nội lực khơng có ngoại lực tác dụng vào hệ nên áp dụng phương trình (1.14) cho hệ ba chất điểm trường hợp chuyển động hai chiều: pA pB pC pA pB pC 10 o o p Ax pBx pCx pAx pBx pCx 0 pA pB Cos50 pC Cos80 o o pCy 0 pB Sin50 pC Sin80 p Ay pBy pCy pAy pBy pA pB Cos50o pC Cos80o o o pB Sin50 pC Sin80 o o 0,5M vA 0, 2M vB Cos50 0,3M 5m / s Cos80 o o 0, 2M vB Sin50 0,3M 5m / s Sin80 0,5M vA 0, M vB 0, 643 0,3M 5m / s 0, 26 0, M vB 0, 766 0,3M 5m / s 0,985 0,5vA 0,129vB 0, 26 0,153vB 1, 48 0,129 9, 6m / s 0, 26 3, 0m / s vA 0,5 v 1, 48 9, 6m / s B 0,153 Vậy tốc độ mảnh A 3,0m/s; tốc độ mảnh B 9,6m/s Ghi chú: Tốc độ sau nổ không phụ thuộc vào khối lượng M dừa mà phụ thuộc vào tỉ lệ khối lượng mảnh vỡ dừa Theo phương trình (1.13), khối tâm dừa trước sau nổ không đổi 1.4 Ánh sáng màu sắc [3] 1.4.1 Hệ thống màu RGB Nhiều thực nghiệm xác định rằng, nhận gần tất màu sắc tồn thiên nhiên cách trộn chùm ánh sáng màu đỏ , màu lục màu lam theo tỉ lệ xác định Để giải thích điều này, nhiều nhà khoa học đề thuyết khác chế cảm thụ màu mắt người thuyết thành phần cảm thụ màu công nhận rộng rãi Theo thuyết thành phần cảm thụ màu, võng mạc tồn ba loại phần tử nhạy cảm với ánh sáng tế bào hình chóp Các loại phần tử có phản ứng khác ánh sáng có bước sóng khác Do đặc điểm ba loại tế bào này,nên màu sắc tổng hợp từ ba màu Cho đến khoa giải phẫu chưa phat minh ba loại tế bào nhạy cảm với ánh sáng có bước sóng khác đó, q trình thực nghiệm lại phù hợp với lý thuyết này, nên sử dụng Trong thực tế, ánh sáng đồng thời kích thích ba tế bào hình chóp, tùy theo bước sóng,các dạng tế bào hình chóp kích thích khác Sự cảm thụ màu định mức độ kích thích tế bào hình chóp 21 Nhập xuất liệu qua editbox Right_click editbox chọn Add Variable Chọn Value Category Đặt tên biến Variable name Nhấn Finish Trong source code cần nhập liệu vào biến dùng lệnh “UpdateData(TRUE)” Xuất liệu dùng lệnh “UpdateData(FALSE)” Hình 2.8 22 Khai báo sử dụng Timer Khai báo timer dùng lệnh: SetTimer(1, thời gian, 0) đặt hàm khởi tạo: BOOL CprojectnameDlg::OnInitDialog() Hủy bỏ timer dùng lệnh: KillTimer(1) Tạo kiện timer (công việc cần làm ngắt timer xảy ra) - Trong tab Class View click CprojectnameDlg - Trong cửa sổ Properties click nút Messages chọn OnTimer Hình 2.9 - Sau source code có hàm: void CProjectnameDlg::OnTimer(UINT_PTR nIDEvent) thêm code cần thực 23 2.4 Giao diện chƣơng trình Trên giao diện chương trình cho phép người sử dụng nhập trước khối lượng động tử Nhấn nút “Start” để khởi động trình đo Khi phát trình chuyển động động tử, chương trình thực tính tốn vận tốc từ suy động lượng động tử hiển thị kết giao diện Nhấn nhút “Stop” để xóa kết chuẩn bị cho lần đo Kết thúc chương trình nhấn nút “Close” Hình 2.10 24 2.5 Thực nghiệm kết Thực nghiệm với va chạm đàn hồi So sánh kết với phương pháp trước sử dụng kế Do thí nghiệm có kế lần đo động tử nên thực nghiệm đo động tử với trường hợp khối lượng khác Mỗi trường hợp thực lần đo Kết cho bảng sau: Đo động tử 1: m1=m2 Trước pp pp cũ Sai số Sau pp pp cũ Sai số 0.15300 0.15699 0.1620 0.1485 Lần đo 0.1820 0.1705 -3 3 -0.07800 -0.08227 -5 -0.1760 -0.1769 -1 -0.1340 -0.1383 -3 -0.1150 -0.1179 -2 -0.1830 -0.1876 -2 0.1970 0.1906 0.1820 0.1764 Bảng 2.1 Đo động tử khối lượng hai động tử m1>m2 Trước pp pp cũ Sai số Sau pp pp cũ Sai số 0.178 0.1798 0.2040 0.1888 Lần đo 0.159 0.1579 0.176 0.1709 0.237 0.2233 -1 -0.124 -0.131 -5 -0.1109 -0.1155 -4 -0.106 -0.109 -3 -0.127 -0.129 -2 -0.106 -0.115 -8 Bảng 2.2 Đo động tử khối lượng động tử lớn động tử m1m2 Trước Lần đo pp pp cũ -0.092 -0.086 -0.0920 -0.0926 -0.097 -0.093 -0.182 -0.177 -0.092 -0.088 -1 4 0.1266 0.1313 -4 0.1036 0.1068 -3 0.1216 0.1237 -2 0.0917 0.0912 0.1646 0.1634 Sai số Sau pp pp cũ Sai số Bảng 2.5 Đo động tử khối lượng động tử lớn động tử m1LoadIcon(IDR_MAINFRAME); } void CKiemnghiemDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_DongLuong1T); DDX_Text(pDX, IDC_EDIT3, m_DongLuong1S); DDX_Text(pDX, IDC_EDIT2, m_DongLuong2T); DDX_Text(pDX, IDC_EDIT4, m_DongLuong2S); DDX_Text(pDX, IDC_EDIT6, m_TongT); DDX_Text(pDX, IDC_EDIT7, m_TongS); DDX_Text(pDX, IDC_EDIT8, m_KhoiLuong1); DDX_Text(pDX, IDC_EDIT9, m_KhoiLuong2); } BEGIN_MESSAGE_MAP(CKiemnghiemDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() ON_BN_CLICKED(IDCANCEL, &CKiemnghiemDlg::OnBnClickedCancel) ON_BN_CLICKED(IDC_Start, &CKiemnghiemDlg::OnBnClickedStart) ON_BN_CLICKED(IDC_Stop, &CKiemnghiemDlg::OnBnClickedStop) END_MESSAGE_MAP() // CKiemnghiemDlg message handlers BOOL CKiemnghiemDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Add "About " menu item to system menu // IDM_ABOUTBOX must be in the system command range ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon 30 SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here SetTimer(1,100,0); // Dinh thoi 100ms capture = frame = size = hsvimg = height width step channels cvCaptureFromCAM(0); cvQueryFrame(capture); cvGetSize(frame); cvCreateImage(size,IPL_DEPTH_8U,3); = frame->height; = frame->width; = frame->widthStep/sizeof(uchar); = frame->nChannels; m_Counter = 0; m_Start = FALSE; m_TruocSau = TRUE; //cvNamedWindow("mywindow",CV_WINDOW_AUTOSIZE); return TRUE; // return TRUE unless you set the focus to a control } void CKiemnghiemDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon For MFC applications using the document/view model, // this is automatically done for you by the framework void CKiemnghiemDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } 31 else { CDialogEx::OnPaint(); } } // The system calls this function to obtain the cursor to display while the user drags // the minimized window HCURSOR CKiemnghiemDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CKiemnghiemDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: Add your message handler code here and/or call default if (m_Start == TRUE) // Nhan nut "Start" { frame = cvQueryFrame(capture); cvCvtColor(frame,hsvimg,CV_BGR2HSV); uchar* hsv = (uchar *)hsvimg->imageData; short i, j; short N1 = 0, N2 = 0; float Location1 = 0, Location2 = 0; /* Tim vi tri cac dong tu bang cach nhan dang mau va xanh */ for(i=142; i < 197; i++) { /* Khoang thuc te co dong tu (thay doi chinh webcam) */ for(j=0; j < width; j++) { if (((hsv[i*step+j*channels+0]174)) & (hsv[i*step+j*channels+1]>120) & (hsv[i*step+j*channels+2]>120)) {// Mau ++N1; Location1 += j; } if (((hsv[i*step+j*channels+0]>85)&(hsv[i*step+j*channels+0]100) & (hsv[i*step+j*channels+2]>120)) {// Mau xanh ++N2; Location2 += j; } } } /* Bat dau qua trinh sau va cham: m_TruocSau = FALSE Dieu kien N1, N2 > 100 (pixel) de dam bao cac dong tu van thi truong cua webcam */ if ((N1 > 100)&(N2 > 100)&(m_TruocSau == FALSE)) // Sau va cham { ++m_Counter; Location1 /= N1; Location2 /= N2; 32 if ((Location1 < 30) | (Location2 > 610)) { m_DongLuong1S = m_KhoiLuong1*(1.41*(m_Location1_Previous - m_Location1_First)/(640*(m_Counter - 2)*0.1)); // Tinh dong luong vat (100ms = 0.1s) m_DongLuong2S = m_KhoiLuong2*(1.41*(m_Location2_Previous - m_Location2_First)/(640*(m_Counter - 2)*0.1)); // Tinh dong luong vat if ((m_DongLuong1S < 0.005)&(m_DongLuong1S > 0.005)) m_DongLuong1S = 0; if ((m_DongLuong2S < 0.005)&(m_DongLuong2S > 0.005)) m_DongLuong2S = 0; m_TongS = m_DongLuong1S + m_DongLuong2S; UpdateData(FALSE); // Xuat ket qua man hinh m_Start = FALSE; } else { m_Location1_Previous = Location1; m_Location2_Previous = Location2; } } /* Bat dau qua trinh truoc va cham: m_TruocSau = TRUE Dieu kien N1, N2 > 900 (pixel) de dam bao cac dong tu da vao hoan toan thi truong cua webcam */ if ((N1 > 900)&(N2 > 900)&(m_TruocSau == TRUE)) // Truoc va cham { ++m_Counter; Location1 /= N1; // Tinh vi tri hien tai cua dong tu Location2 /= N2; if (m_Counter == 1) // Diem dau tien { m_Location1_First = Location1; // Luu vi tri dau tien cua qua trinh m_Location2_First = Location2; // truoc va cham m_Location1_Previous = Location1; // Luu vi tri lien truoc de so sanh voi lan sau m_Location2_Previous = Location2; } else { if ((Location1 - m_Location1_Previous > 5)&(Location2 - m_Location2_Previous < 5)) // Dieu kien qua trinh di chuyen chuyen chua dao chieu: Chua va cham { m_Location1_Previous = Location1; // Cap nhat lai vi tri lien truoc m_Location2_Previous = Location2; // bang vi tri hien tai } else // Luc va cham 33 { m_DongLuong1T = m_KhoiLuong1*(1.41*(m_Location1_Previous m_Location1_First)/(640*(m_Counter-2)*0.1)); // Tinh dong luong vat (m*v) m_DongLuong2T = m_KhoiLuong2*(1.41*(m_Location2_Previous m_Location2_First)/(640*(m_Counter-2)*0.1)); // Tinh dong luong vat 100ms = 0.1s -0.005)) if ((m_DongLuong1T < 0.005)&(m_DongLuong1T > // Gia tri qua nho thi xap xi bang m_DongLuong1T = 0; if ((m_DongLuong2T < 0.005)&(m_DongLuong2T > -0.005)) m_DongLuong2T = 0; m_TongT = m_DongLuong1T + m_DongLuong2T; /* Khoi dong lai gia tri cho qua trinh sau va cham */ m_Counter m_Location1_First m_Location2_First m_Location1_Previous m_Location2_Previous = = = = = 1; Location1; Location2; Location1; Location2; m_TruocSau = FALSE; } } } } //cvShowImage("mywindow",frame); CDialogEx::OnTimer(nIDEvent); } void CKiemnghiemDlg::OnBnClickedCancel() { // TODO: Add your control notification handler code here KillTimer(1); cvReleaseCapture(&capture); //cvDestroyWindow("mywindow"); CDialogEx::OnCancel(); } void CKiemnghiemDlg::OnBnClickedStart() { // TODO: Add your control notification handler code here m_Start = TRUE; UpdateData(TRUE); // Nhap du lieu khoi luong GetDlgItem(IDC_Start)->EnableWindow(FALSE); // Khong cho nhan nut "Start" nua 34 } void CKiemnghiemDlg::OnBnClickedStop() { // TODO: Add your control notification handler code here m_Start = FALSE; m_TruocSau = TRUE; m_Counter = 0; m_DongLuong1T = 0; m_DongLuong2T = 0; m_DongLuong1S = 0; m_DongLuong2S = 0; m_TongT = 0; m_TongS = 0; UpdateData(FALSE); GetDlgItem(IDC_Start)->EnableWindow(TRUE); // Cho nhan nut "Start" lai } /* */ 35 // Kiem nghiemDlg.h : header file #pragma once // CKiemnghiemDlg dialog class CKiemnghiemDlg : public CDialogEx { // Construction public: CKiemnghiemDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data enum { IDD = IDD_KIEMNGHIEM_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: HICON m_hIcon; // Generated message map functions virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: float m_KhoiLuong1; float m_KhoiLuong2; double double double double double double float float float float float float m_DongLuong1T; m_DongLuong1S; m_DongLuong2T; m_DongLuong2S; m_TongT; m_TongS; m_CounterT; m_CounterS; m_Location1_Previous; m_Location1_First; m_Location2_Previous; m_Location2_First; bool m_Start; CvCapture* capture; IplImage* frame; IplImage* hsvimg; CvSize size; int height; int width; int step; int channels; afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnBnClickedCancel(); afx_msg void OnBnClickedStart(); };