offline
- NIx Car
- Legendarni građanin
- Més que un club
- Glavni vokal @ Harpun
- Pridružio: 27 Feb 2009
- Poruke: 3898
- Gde živiš: Novi Sad,Klisa
|
Napisano: 08 Apr 2013 23:49
Pa kruznica sata mi predstavlja trigonometrijski krug. Koordinatni pocetak je samo pomeren za 400 po X osi i za 300 po Y osi.
tangens od 0 je 0. Formula za tg = (k1-k2)/(1 + k1*k2);
Ovde lezi problem. imam koeficijent pravca dve prave. Moram da nadjem funkciju po kojoj se koordinate linearno menjaju, a da mi se pritom ne promeni duzina kazaljke.
Dopuna: 11 Apr 2013 22:00
Sredio sam sve. Okacicu ovde kod.
#include <stdio.h>
#include <stdlib.h>
#include<allegro.h>
#include<math.h>
#include<time.h>
#include<string.h>
typedef struct tacka
{
int x;
int y;
float ugao;
}TTacka;
void pozKaz(TTacka sekunda, TTacka minuta, TTacka sat, int cas, int minut, int sekund, int pi, int radius);
void izvuciVreme( int *sat, int * minut, int *sekund);
void crtajlinije(int pi, int radius, int *x, int *y, float *ugao);
int main()
{
TTacka sekunda, minuta, sat;
float pi = 3.14159265358979323846;
int radius = 100, brojac = 0, cas = 0, minut, sekund;
int x,y;
float ugao = pi + pi/30;
sekunda.x = 300;
sekunda.y = 200;
sekunda.ugao = pi + pi/30;
izvuciVreme(&cas, &minut, &sekund);
sat.ugao = pi;
minuta.ugao = pi;
for(int i = 0 ; i < minut; i++)
minuta.ugao-= pi/30;
for(int i = 0; i < sekund;i++)
sekunda.ugao -= pi/30;
if (cas >= 12)
for(int i = 0; i < cas - 12; i++)
sat.ugao -= pi/6;
else
for(int i = 0; i < cas; i++)
sat.ugao -= pi/6;
minuta.x = (radius - 30) * sin (minuta.ugao);
minuta.y = (radius - 30) * cos (minuta.ugao);
sat.x = (radius - 40) * sin (sat.ugao);
sat.y = (radius - 40 ) * cos (sat.ugao);
allegro_init();
BITMAP *Bafer = create_bitmap(800, 600);
install_keyboard();
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
while(!key[KEY_ESC]){
sekunda.ugao -= pi/30;
sekunda.x = radius * sin(sekunda.ugao);
sekunda.y = radius * cos(sekunda.ugao);
circlefill(screen, 400, 300, radius, makecol(255, 0, 0));
line(screen, 400, 300, 400 + sekunda.x,300 + sekunda.y, makecol(0, 0, 255));
line(screen, 400, 300, 400 + minuta.x, 300 + minuta.y, makecol(255,255,0));
line(screen, 400, 300, 400 + sat.x, 300 + sat.y, makecol(0,255,255));
blit(screen,screen, 0, 0, 0, 0, 800, 600);
rest(1000);
brojac += 1000;
if(brojac % (1000 * 60) == 0)
{
minuta.ugao -= pi/30;
minuta.x = (radius - 30) * sin (minuta.ugao);
minuta.y = (radius - 30) * cos (minuta.ugao);
brojac = 0;
cas++;
if(cas == 60)
{
cas = 0;
sat.ugao -= pi/6;
sat.x = (radius - 40) * sin (sat.ugao);
sat.y = (radius - 40) * cos (sat.ugao);
}
}
clear_bitmap(screen);
}
readkey();
destroy_bitmap(Bafer);
allegro_exit();
return 0;
}
END_OF_MAIN()
void izvuciVreme( int *sat, int * minut, int *sekund)
{
char str[50];
time_t t;
int i = 0, j;
time(&t);
strcpy(str, ctime(&t));
while(str[i] != ':') i++;
i-=2;
*sat = (str[i]- 48) * 10 + (str[i + 1] - 48);
i+=3;
*minut = (str[i]- 48) * 10 + (str[i + 1] - 48);
i+=3;
*sekund = (str[i]- 48) * 10 + (str[i + 1] - 48);
}
i exe fajl sa .dll koji je potreban
https://www.mycity.rs/must-login.png
|