Jednacina prave kazaljke

Jednacina prave kazaljke

offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3896
  • Gde živiš: Novi Sad,Klisa

Trebala bi mi mala pomoc oko odredjivanja jednacine prave kazaljke na satu, posto sam iz programiranja dobio zadatak da napravim sat. Sat nije toliki problem koliki je problem naterati kazaljku da se kazaljka ravnomerno okrece i da pritom ne menja svoju duzinu.
Neka su pocetne koordinate tacka A1(400,300) i tacka A2(400, 210). Slabo mi ide analiticka geometrija pa ne bih znao kako da pocnem ovaj zadatak... Sad



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14609
  • Gde živiš: Niš

Jednačina prave kroz dve tačke je y - y1 = ((y2 - y1)/(x2 - x1))*(x - x1) gde su x1 i y1 koordinate prve tačke, a x2 i y2 koordinate druge tačke. Odatle možeš da izraziš y.

Inače, kako si to to sve zamislio? Koliko ja kapiram, jedna tačka je uvek fiksirana i nalazi se u centru sata, a druga tačka se nalazi na kružnici određenog poluprečnika. E sad, poluprečnik možeš da izračunaš iz koordinata ove dve tačke koje su ti date. Zatim jednu od te dve tačke izabereš za centralnu tačku i za nju postaviš jednačinu kružnice. Onda praktično uzimaš jednu tačku sa kružnice i centralnu tačku u postavljaš jednačinu prave kroz te dve tačke.



offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3896
  • Gde živiš: Novi Sad,Klisa

hvala kolega, sutra cu probati da razradim tvoju ideju Smile Ziveli

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14609
  • Gde živiš: Niš

Napisano: 06 Apr 2013 18:27

Molim. Smile
Što se matematike tiče, tu sam.
Programiranje ćeš morati sam, još malo... Razz

Dopuna: 08 Apr 2013 0:35

BTW, javio se Ivanče (ne znam što se ne javlja ovde - Ivanče, javi se Very Happy) i ima i on predlog. Možda to može lakše da se odradi koristeći koeficijent pravca prave koji je ujedno tangens ugla koji prava zaklapa sa pozitivnim delom x-ose. Ukoliko je centar sata u koordinatnom početku, bilo bi lako. Praktično bi imao brojač koji ide od nule i (recimo ako je reč o sekundari) u svakoj sekundi dodavao +6, zatim tražio tg dobijene vrednosti i to koristio kao koeficijent pravca prave. Tu bi imao i dva uslova, kad je brojač 90 i kad je 270 jer je tangens za te vrednosti uglova jednak + i - beskonačno.

offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3896
  • 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. Very Happy

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. Very Happy

#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 Smile


https://www.mycity.rs/must-login.png

Ko je trenutno na forumu
 

Ukupno su 679 korisnika na forumu :: 18 registrovanih, 4 sakrivenih i 657 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Apok, babaroga, CrazyDiablo, CrazySerb_MLD, goxin, ikan, Kalvi1979, kuntalo, nenad81, Panter, riva, sombrero, Trpe Grozni, vlahale, vlvl, W123, 223223