Advertisement
Guest User

Do gosi ostateczne

a guest
May 31st, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.60 KB | None | 0 0
  1.  
  2. #include <windows.h>
  3. #include "stdafx.h"
  4. //#include <tchar.h>
  5. #include <windows.h>
  6. #include <fstream>
  7. #include <iostream>
  8. #include <string>
  9. #include <cmath>
  10. #include <cstdlib>
  11. using namespace std;
  12.  
  13. LPSTR NazwaKlasy = "Klasa Okienka";
  14. MSG Komunikat;
  15. ifstream plik;
  16.  
  17.  
  18. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  19.  
  20. HWND g, ax, ay, az, wszystkie, lewo, prawo, gora, dol, play, pause, Timer_Wyswietlanie;
  21. HDC wykres;
  22. HPEN CzerwonePioro, ZielonePioro, NiebieskiePioro, ZoltePioro, Pudelko2;
  23. POINT stary2;
  24.  
  25.  
  26. const WORD ID_TIMER = 1;
  27.  
  28. int zegar = 0;
  29. float p1, p2, p3;
  30. float pomiary[20][4];
  31. float DaneWyj[4];
  32. float temp[3];
  33. float starypunktax;
  34. float starypunktay;
  35. float starypunktaz;
  36. float starypunktg;
  37.  
  38. bool zolty = false;
  39. bool zielony = false;
  40. bool czerwony = false;
  41. bool drawall = false;
  42. bool niebieski = false;
  43.  
  44. float stala = 250;
  45. float polx = 50;
  46. float przesuniecie = 0.35;
  47. int shortness = 1;
  48. int probki;
  49.  
  50. void PrzesuwanieWynikow(float pomiary[20][4]);
  51. void wczytajtrzy(ifstream &plik, float temp[3]);
  52. void odrzucanie_probek(ifstream &plik, int pomin);
  53. void OlbiczanieDanychWyjsciowych(float pomiary[20][4], float DaneWyj[3]);
  54. void rysowanie_wykresow(HWND hwnd,ifstream &plik, float pomiary[20][4], float DaneWyj[3]);
  55.  
  56. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  57. {
  58.  
  59. // WYPEŁNIANIE STRUKTURY
  60. WNDCLASSEX wc;
  61.  
  62. wc.cbSize = sizeof(WNDCLASSEX);
  63. wc.style = 0;
  64. wc.lpfnWndProc = WndProc;
  65. wc.cbClsExtra = 0;
  66. wc.cbWndExtra = 0;
  67. wc.hInstance = hInstance;
  68. wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  69. wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  70. wc.hbrBackground = (HBRUSH)(3);
  71. wc.lpszMenuName = NULL;
  72. wc.lpszClassName = NazwaKlasy;
  73. wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  74.  
  75. // REJESTROWANIE KLASY OKNA
  76. if (!RegisterClassEx(&wc))
  77. {
  78. MessageBox(NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
  79. MB_ICONEXCLAMATION | MB_OK);
  80. return 1;
  81. }
  82.  
  83.  
  84. // TWORZENIE OKNA
  85. HWND hwnd;
  86.  
  87. hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPEDWINDOW,
  88. CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);
  89.  
  90. if (hwnd == NULL)
  91. {
  92. MessageBox(NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION);
  93. return 1;
  94. }
  95.  
  96. plik.open("outputRobotForwardB02.log");
  97. if (!plik.good())
  98. MessageBox(hwnd, "Nie udalo sie otworzyc pliku!", "Ha!", MB_ICONINFORMATION);
  99.  
  100. //POLE TEKSTOWE DO USUWANIA N PROBEK
  101.  
  102. HWND napis = CreateWindowEx(0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
  103. SS_LEFT, 280, 10, 150, 32, hwnd, NULL, hInstance, NULL);
  104.  
  105. SetWindowText(napis, "Ile początkowych próbek usunąć?");
  106.  
  107. HWND wpisz = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
  108. 400, 10, 41, 30, hwnd, NULL, hInstance, NULL);
  109.  
  110. //pobieranie ilości próbek (w stringu)
  111. DWORD dlugosc = GetWindowTextLength(wpisz);
  112. LPSTR Bufor = (LPSTR)GlobalAlloc(GPTR, dlugosc + 1);
  113. GetWindowText(wpisz, Bufor, dlugosc + 1);
  114. probki = atoi(Bufor);
  115.  
  116. //PRZYCISKI
  117. g = CreateWindowEx(0, "BUTTON", "g(żółty)", WS_CHILD | WS_VISIBLE,
  118. 170, 60, 60, 50, hwnd, NULL, hInstance, NULL);
  119.  
  120. ax = CreateWindowEx(0, "BUTTON", "ax(zielony)", WS_CHILD | WS_VISIBLE,
  121. 250, 60, 80, 50, hwnd, NULL, hInstance, NULL);
  122.  
  123. ay = CreateWindowEx(0, "BUTTON", "ay(czerwony)", WS_CHILD | WS_VISIBLE,
  124. 350, 60, 90, 50, hwnd, NULL, hInstance, NULL);
  125.  
  126. az = CreateWindowEx(0, "BUTTON", "az(niebieski)", WS_CHILD | WS_VISIBLE,
  127. 460, 60, 90, 50, hwnd, NULL, hInstance, NULL);
  128.  
  129. wszystkie = CreateWindowEx(0, "BUTTON", "wszystkie", WS_CHILD | WS_VISIBLE,
  130. 570, 60, 75, 50, hwnd, NULL, hInstance, NULL);
  131.  
  132. // rozszerzanie wykresu
  133.  
  134. lewo = CreateWindowEx(0, "BUTTON", "<<<", WS_CHILD | WS_VISIBLE,
  135. 40, 70, 35, 35, hwnd, NULL, hInstance, NULL);
  136.  
  137. prawo = CreateWindowEx(0, "BUTTON", ">>>", WS_CHILD | WS_VISIBLE,
  138. 90, 70, 35, 35, hwnd, NULL, hInstance, NULL);
  139.  
  140. HWND napis3 = CreateWindowEx(0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
  141. SS_LEFT, 30, 30, 120, 32, hwnd, NULL, hInstance, NULL);
  142.  
  143. SetWindowText(napis3, "Regulacja rozszerzalności");
  144.  
  145. // wydłużanie wykresu
  146.  
  147. gora = CreateWindowEx(0, "BUTTON", "UP", WS_CHILD | WS_VISIBLE,
  148. 40, 160, 35, 35, hwnd, NULL, hInstance, NULL);
  149.  
  150. dol = CreateWindowEx(0, "BUTTON", "DOWN", WS_CHILD | WS_VISIBLE,
  151. 90, 160, 60, 35, hwnd, NULL, hInstance, NULL);
  152.  
  153. HWND napis4 = CreateWindowEx(0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
  154. SS_LEFT, 45, 115, 80, 32, hwnd, NULL, hInstance, NULL);
  155.  
  156. SetWindowText(napis4, "Regulacja Amplitudy");
  157.  
  158. //timer
  159.  
  160. play = CreateWindowEx(0, "BUTTON", "PLAY", WS_CHILD | WS_VISIBLE,
  161. 600, 150, 50, 50, hwnd, NULL, hInstance, NULL);
  162.  
  163. pause = CreateWindowEx(0, "BUTTON", "PAUSE", WS_CHILD | WS_VISIBLE,
  164. 700, 150, 50, 50, hwnd, NULL, hInstance, NULL);
  165.  
  166. //czas
  167.  
  168. Timer_Wyswietlanie = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
  169. 480, 150, 60, 30, hwnd, (HMENU)3, hInstance, NULL);
  170.  
  171. HWND napis2 = CreateWindowEx(0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
  172. SS_LEFT, 200, 150, 240, 30, hwnd, NULL, hInstance, NULL);
  173.  
  174. SetWindowText(napis2, "Zegar (numer analizowanej próbki)");
  175.  
  176. ShowWindow(hwnd, nCmdShow); // Pokaż okienko...
  177. UpdateWindow(hwnd);
  178.  
  179. // wykres-osie
  180. HDC hdcOkno = GetDC(hwnd);
  181. HPEN CzarnePioro, Pudelko;
  182. POINT stary;
  183. CzarnePioro = CreatePen(PS_SOLID, 1, 000000);
  184. Pudelko = (HPEN)SelectObject(hdcOkno, CzarnePioro);
  185. //oś t
  186. MoveToEx(hdcOkno, 50, 500, &stary);
  187. LineTo(hdcOkno, 750, 500);
  188. LineTo(hdcOkno, 740, 490);
  189. LineTo(hdcOkno, 740, 510);
  190. LineTo(hdcOkno, 750, 500);
  191. //oś G
  192. MoveToEx(hdcOkno, 50, 500, &stary);
  193. LineTo(hdcOkno, 50, 200);
  194. LineTo(hdcOkno, 60, 210);
  195. LineTo(hdcOkno, 40, 210);
  196. LineTo(hdcOkno, 50, 200);
  197.  
  198. SelectObject(hdcOkno, Pudelko);
  199. DeleteObject(CzarnePioro);
  200. ReleaseDC(hwnd, hdcOkno);
  201.  
  202. MessageBox(NULL, "Najpierw wpisz ilość próbek do usunięcia, wybiesz zmienną/zmienne, które chcesz zobaczyć na wykresiea, a potem kliknij PLAY. :)", "Hej!", MB_ICONEXCLAMATION);
  203. // Pętla komunikatów
  204. while (GetMessage(&Komunikat, NULL, 0, 0))
  205. {
  206. TranslateMessage(&Komunikat);
  207. DispatchMessage(&Komunikat);
  208. }
  209. return Komunikat.wParam;
  210. }
  211.  
  212. // OBSŁUGA ZDARZEŃ
  213. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  214. {
  215. switch (msg)
  216. {
  217. case WM_CLOSE:
  218. DestroyWindow(hwnd);
  219. break;
  220.  
  221. case WM_DESTROY:
  222. PostQuitMessage(0);
  223. break;
  224.  
  225. case WM_COMMAND:
  226.  
  227. if ((HWND)lParam == lewo)
  228. {
  229. if (przesuniecie>0.2)
  230. przesuniecie=przesuniecie-0.1;
  231. }
  232.  
  233. if ((HWND)lParam == prawo)
  234. {
  235. if (przesuniecie<0.6)
  236. przesuniecie=przesuniecie + 0.1;
  237. }
  238.  
  239. if ((HWND)lParam == gora)
  240. {
  241. if (stala<270)
  242. stala = stala + 10;
  243. }
  244.  
  245. if ((HWND)lParam == dol)
  246. {
  247. if (stala>100)
  248. stala = stala - 10;
  249. }
  250.  
  251. if ((HWND)lParam == play)
  252. {
  253. odrzucanie_probek(plik, probki);
  254. if (SetTimer(hwnd, ID_TIMER, 5, NULL) == 0);
  255. }
  256.  
  257. if ((HWND)lParam == pause)
  258. {
  259. KillTimer(hwnd, ID_TIMER);
  260. }
  261.  
  262. if ((HWND)lParam == g)
  263. {
  264. if (zolty == true)
  265. zolty = false;
  266. else if (zolty == false)
  267. zolty = true;
  268. }
  269.  
  270. if ((HWND)lParam == ax)
  271. {
  272. if (zielony == true)
  273. zielony = false;
  274. else if (zielony == false)
  275. zielony = true;
  276. }
  277. if ((HWND)lParam == ay)
  278. {
  279. if (czerwony == true)
  280. czerwony = false;
  281. else if (czerwony == false)
  282. czerwony = true;
  283. }
  284. if ((HWND)lParam == az)
  285. {
  286. if (niebieski == true)
  287. niebieski = false;
  288. else if (niebieski == false)
  289. niebieski = true;
  290. }
  291. if ((HWND)lParam == wszystkie)
  292. {
  293. if (drawall == true)
  294. {
  295. drawall = false;
  296. czerwony = false;
  297. zielony = false;
  298. zolty = false;
  299. niebieski = false;
  300. }
  301. else if (drawall == false)
  302. {
  303. drawall = true;
  304. czerwony = true;
  305. zielony = true;
  306. zolty = true;
  307. niebieski = true;
  308. }
  309. }
  310. break;
  311.  
  312. case WM_TIMER:
  313. {
  314. SetDlgItemInt(hwnd, 3, zegar, 1);
  315. rysowanie_wykresow(hwnd,plik,pomiary,DaneWyj);
  316. zegar++; }
  317. break;
  318.  
  319.  
  320. default:
  321. return DefWindowProc(hwnd, msg, wParam, lParam);
  322. }
  323.  
  324. return 0;
  325. }
  326.  
  327. void OlbiczanieDanychWyjsciowych(float pomiary[20][4], float DaneWyj[3])
  328. {
  329. float sumax = 0;
  330. float sumay = 0;
  331. float sumaz = 0;
  332. float sumag = 0;
  333. float srednia = 0;
  334.  
  335. for (int i = 0; i<20; i++) {
  336. sumax = sumax + pomiary[i][0];
  337. sumay = sumay + pomiary[i][1];
  338. sumaz = sumaz + pomiary[i][2];
  339. sumag = sumag + pomiary[i][3];
  340. }
  341. DaneWyj[0] = sumax / 20;
  342. DaneWyj[1] = sumay / 20;
  343. DaneWyj[2] = sumaz / 20;
  344. DaneWyj[3] = sumag / 20;
  345. }
  346.  
  347. void odrzucanie_probek(ifstream &plik, int pomin)
  348. {
  349. int licznik = 0;
  350. float n;
  351.  
  352. for (int i = 0; i<pomin; i++)
  353. for (int j = 0; j< 12; j++)
  354. plik >> n;
  355. }
  356. void wczytajtrzy(ifstream &plik, float temp[3])
  357. {
  358. for (int i = 0; i<3; i++)
  359. temp[i] = 0;
  360.  
  361. int licznik = 0;
  362. int pomin;
  363. float n;
  364.  
  365. int zapis_licz = 0;
  366. int x = 0;
  367. for (int i = 0; i<4; i++)
  368. {
  369. x++;
  370. float a;
  371. float b;
  372. float c;
  373. plik >> a >> b >> c;
  374. if (i == 1)
  375. {
  376. licznik++;
  377. if (plik.good())
  378. {
  379. temp[0] = a;
  380. temp[1] = b;
  381. temp[2] = c;
  382. }
  383. else break; //zakoÄcz wczytywanie danych - wyst^pi¸ jakia b¸^d (np. nie ma wi«cej danych w pliku)
  384. }
  385. } //while
  386. }
  387.  
  388. void PrzesuwanieWynikow(float pomiary[20][4])
  389. {
  390. for (int i = 1; i<20; i++)
  391. for (int j = 0; j<4; j++)
  392. pomiary[i - 1][j] = pomiary[i][j];
  393. }
  394.  
  395. void rysowanie_wykresow(HWND hwnd, ifstream &plik, float pomiary[20][4], float DaneWyj[3])
  396. {
  397. if (zegar == 0)
  398. {
  399. for (int i = 0; i < 20; i++) { //poczatkowe uzupelnianie danych
  400. wczytajtrzy(plik, temp);
  401. pomiary[i][0] = temp[0];
  402. pomiary[i][1] = temp[1];
  403. pomiary[i][2] = temp[2];
  404. pomiary[i][3] = sqrt(temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2]);
  405. }
  406.  
  407. OlbiczanieDanychWyjsciowych(pomiary, DaneWyj);
  408.  
  409. //punkt startowy (wartość y)
  410.  
  411. starypunktax = 500 + stala*DaneWyj[0];
  412. starypunktay = 500 + stala*DaneWyj[1];
  413. starypunktaz = 500 + stala*DaneWyj[2];
  414. starypunktg = 500 - stala*DaneWyj[3];
  415.  
  416. }
  417.  
  418. PrzesuwanieWynikow(pomiary);
  419. wczytajtrzy(plik, temp);
  420. pomiary[19][0] = temp[0];
  421. pomiary[19][1] = temp[1];
  422. pomiary[19][2] = temp[2];
  423. pomiary[19][3] = sqrt(temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2]);
  424. OlbiczanieDanychWyjsciowych(pomiary, DaneWyj); //DaneWyj to tablica z danymi do rysowania
  425. polx += przesuniecie;
  426. {
  427. HDC wykres = GetDC(hwnd);
  428. CzerwonePioro = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
  429. NiebieskiePioro = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
  430. ZielonePioro = CreatePen(PS_SOLID, 1, RGB(40, 130, 0));
  431. ZoltePioro = CreatePen(PS_SOLID, 1, RGB(255, 255, 0));
  432.  
  433. if (zielony == true)
  434. {
  435. Pudelko2 = (HPEN)SelectObject(wykres, ZielonePioro);
  436. MoveToEx(wykres, polx - przesuniecie, starypunktax, &stary2);
  437. LineTo(wykres, polx, 500 + stala*DaneWyj[0]);
  438. starypunktax = 500 + stala*DaneWyj[0];
  439. }
  440.  
  441. if (czerwony == true)
  442. {
  443. SelectObject(wykres, CzerwonePioro);
  444. MoveToEx(wykres, polx - przesuniecie, starypunktay, &stary2);
  445. LineTo(wykres, polx, 500 + stala*DaneWyj[1]);
  446. starypunktay = 500 + stala*DaneWyj[1];
  447. }
  448.  
  449. if (niebieski == true)
  450. {
  451. SelectObject(wykres, NiebieskiePioro);
  452. MoveToEx(wykres, polx - przesuniecie, starypunktaz, &stary2);
  453. LineTo(wykres, polx, 500 + stala * DaneWyj[2]);
  454. starypunktaz = 500 + stala * DaneWyj[2];
  455. }
  456.  
  457. if (zolty == true)
  458. {
  459. SelectObject(wykres, ZoltePioro);
  460. MoveToEx(wykres, polx - przesuniecie, starypunktg, &stary2);
  461. LineTo(wykres, polx, 500 - stala * DaneWyj[3]);
  462. starypunktg = 500 - stala * DaneWyj[3];
  463. }
  464. }
  465. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement