Bilijar

ok :)

sta cu kad bi sve da kazem pa onda sto stvari strpam u jednu recenicu pa posle bude RHAA!!!

mislio sam da bi mozda bilo interesantno ostaviti korisniku da sam moze da podesi graviaciju i koeficijent trenja podloge. pa ostavim npr neka standardna podesavanja - mesec, mars, venera, crna rupa (ako izabere ovo prikaze mu se samo jedna crna tacka)


al dobro, o tom potom. to bi mi cak bilo najpametnije da ostavim promenljivu za sad pa da kasnije kad utvrdim koje su velicine dam joj neku konkretnu vrednost


nego, ja sam malo glup, ili mi je nesto los dan - nikako ne mogu da izvucem formulu za nalazenje brzine kugle posle datog vremena !?!

uzeo sam sledece uslove - nema klizanja pa onda kotrljanja, kuglu posmatram kao objekat koji se kliza (ko ga yebe) i na njega stalno deluje isto trenje (trenje kugle koja se kotrlja, znaci kao da kugla odmah pocinje kotrljanje, bez tog kliznog dela, ali s tim da zanemarujem rotaciju lopte - koj ce mi. nicemu ne sluzi, sudar je ionako u ravni, ne u 3d, znaci svodi mi se na isto kao da se kugla kliza, jel?)

brzina u datom momentu srazmerna je pocetnoj brzini, obrnuto srazmerna trenju i mnozi se sa proteklim vremenom. e sad, to sve se mnozi sa jos nekim koeficijentom. kojim? ili je on = 1, tj v=v0/trenje * vreme ?

s tim sto treba da trenje pretvorim u brzinu, ili v0 u silu, svejedno. to mogu da uradim, ali mi ne ide danas...mora da odspavam
 
ok. pogledao sam sta ima tamo i snasao se za racunanje svega. sad kontam kako se sve to krece, samo jos treba da uklopim sve lepo u aloritam.


mislim da mi nece trebati, ali svejedno pade mi na pamet - da li mogu da iz funkcije pozovem tu funkciju?

imam funkciju kretanje_kugle npr, i u njoj radim sledece
funkcija()
{
for (t=0;ciklus traje(ovde imam neke uslove, nebitno);t++)

uzimanje brzine u trenutnku t1
pomeranje kugle u trenutak t2
racunanje brzine v2
racunanje koordinata kugle
da li je upala u rupu?
da - nov krug. ne - dalje
detektovanje sudara sa martinelom?
da - preuredjivanje vektora brzine; na pocetak petlje; ne - dalje
detektovanje sudara sa kuglama?
da - preuredjivanje vektora brzine, kugla 2 pocinje kretanje ; ne - dalje
brzina = 0?
da - nov krug; ne - na pocetak petlje
}
}

ovo crveno moze da me muci

da li je dobro da napravim niz npr. kugle velicine 16x4 koji ce da sadrzi trenutne x,y koordinate kugle i Vx, Vy koordinate vektora brzine za svaku od 16 kugli? onda ovo crveno ne bi bilo problem jer bih malo ukomplikovao funkciju radeci sa ovakvim nizom

a?
 
hm....izgleda da ne mogu da prosledim niz kao argument funkciji...grmpf
...
double niz[2][4];
double Kretanje(double);

int main() {...
Kretanje(niz);
...}
double Kretanje (double) {...}

Poruka kad se iskompajlira

28 (red u kome je Kretanje(niz) )
In function 'int main()':
cannot convert 'double[*][4]' to 'double' for argument '1' to 'double Kretanje(double)'
 
damn it zajbo sam nesto i to ljudski...sad mora krenem lepo sve radim ispocetka...

kretanje kugle je poprilicno normalno, tj lepo usporava, drzi pravac i sve to, ali ... khm ... IDE U POGRESNOM SMERU!!!

izgleda da sam negde okrenuo neki znak...dobar deo proracuna sam poprilicno skratio sad
nego, kad pustim da radi nabije procesor na preko 95% snage...imam P4 na 2 GHz. Nadam se da nece da im sprzi one masine na kojima budu testirali program :lol:
(nadam se da nece da sprzi moju)
 
Ako vec hocesh da pishesh to u 'pravom' C++u, uradi ovako :

- svaki 'objekat' u bilijaru koji mozhe da ima koliziju je recimo klase CObject. Tu spadaju lopte ALI i martinele, kao i 'rupe'
- svaki objekat ima CollisionResolve funkciju, zasnovanu na objektu koji je uputio udarac (recimo void HandleCollision(CObject* hitter) { ... } ) Postoji mali milion nachina da se razradi ovo, mozhesh da idesh chak i tako daleko da implementirash Multi-method paradigmu (vidi knjigu "Modern C++ design"), ali kad krenesh da implementirash videcesh i sam koji ti nachin najvishe odgovara. Inache, u kodiranju fizike, to je i 'najinteresantniji' zadatak, implementacija proizvoljnog collision-response-a za proizvoljan broj razlichitih fizichkih grupa objekata.
- Sve objekte drzhish u jednoj listi-nizu
- Sve objekte apdejtujesh po principu "frejm tajma", znachi u petlji merish proteklo vreme i radish neshto tipa (pseudo-kod) : for_each object in ObjectList : object->Update(frame_time), gde ti Update() funkcija rachuna kretanje i fiziku. Ta petlja nikako ne sme da bude zatvorena (zato i imash 100% procesorskog zauzeca), vec mora da isposhtuje i Windows. Odnosno, petlja mora da uradi jedan Update() za sve objekte u igri, zatim da pozove Windows da odradi svoje (message-pump), i tako u krug.
 
kod jednog zadatka iz krausove zbirke, mislim da moze da ti pomogne.



Kod:
// vektor1.h - Klasa vektora u prostoru.

#ifndef _vektor1_h_
#define _vektor1_h_

#include <iostream>
#include <cmath>
using namespace std;

class Vektor {
  double x, y, z;                                   // Komponente vektora.
public:
  Vektor () { x = y = z = 0; }                            // Konstruktori.
  Vektor (double xx, double yy, double zz)
    { x = xx; y = yy; z = zz; }
  virtual ~Vektor () {}                                   // Destruktor.
  double operator+ () const { return sqrt(x*x+y*y+z*z); } // Intenzitet.
  friend Vektor operator+ (const Vektor& v1, const Vektor& v2) // v1 + v2
    { return Vektor (v1.x+v2.x, v1.y+v2.y, v1.z+v2.z); }
  friend Vektor operator* (const Vektor& v, double s)          // v  * s
    { return Vektor (v.x*s, v.y*s, v.z*s); }
protected:
  virtual void pisi (ostream& d) const                         // Pisanje.
    { d << '(' << x << ',' << y << ',' << z << ')'; }
  friend ostream& operator<< (ostream& d, const Vektor& v)
    { v.pisi (d); return d; }
};

#endif

// brzina.h - Klasa brzina.

#ifndef _brzina_h_
#define _brzina_h_

#include "vektor1.h"

class Brzina: public Vektor {
  void pisi (ostream& d) const { d << 'v'; Vektor::pisi(d); } // Pisanje.
public:
  Brzina (): Vektor() {}                                 // Konstruktori.
  Brzina (double x, double y, double z): Vektor (x, y, z) {}
};

#endif


// pokretan.h - Klase apstraktnih pokretnih objekata.

#ifndef _pokretan_h_
#define _pokretan_h_

class Pokretan {
public:
  virtual Pokretan& proteklo (double dt) =0; // Proteklo je vreme dt.
};

#endif


// tacka4.h - Klasa pokretnih tacaka.

#ifndef _tacka4_h_
#define _tacka4_h_

#include "pokretan.h"
#include "vektor1.h"
#include "brzina.h"

class Tacka: public Pokretan {
  static int ukId;   // Poslednje korisceni identifikator.
  const int id;      // Identifikator tacke.
  Vektor r;          // Vektor polozaja.
  Brzina v;          // Vektor brzine.
public:
  Tacka (const Vektor& rr=Vektor(),              // Nova tacka dobija novi 
         const Brzina& vv=Brzina())              //   identifikator.
    : r(rr), v(vv), id(++ukId) {}
  Tacka (const Tacka& T)                         // Kopija tacke dobija novi
    : r(T.r), v(T.v), id(++ukId) {}              //   identifikator.
  Tacka& operator= (const Tacka& T)              // Levom operandu se ne
    { r = T.r; v = T.v; return *this; }          //   menja identifikator.
  Pokretan& proteklo (double dt)                 // Promena polozaja zbog
    { r = r + v * dt; return *this; }            //   proteklog vremena.
  Vektor R () const { return r; }                // Trenutni polozaj.
  friend double rastojanje (const Tacka& T1, const Tacka& T2) // Rastojanje
    { return + (T1.r + T2.r * -1); }                          //   dve tacke.
  friend ostream&  operator<< (ostream& d, const Tacka& T)    // Pisanje.
    { return d << 'T' << T.id << T.r; }
};

#endif

// tacka4.C - Zajednicki atribut klase pokretnih tacaka.

#include "tacka4.h"

int Tacka::ukId = 0;


// pokretant.C - Ispitivanje klase pokretnih tacaka.

#include "tacka4.h"
#include "vektor1.h"
#include "brzina.h"
#include <iostream>
using namespace std;

int main () {
  cout << "Broj tacaka? "; int n; cin >> n;
  Tacka** tacke = new Tacka* [n];
  for (int i=0; i<n; i++) {
    cout << "Koordinate tmena " << i << "? ";
    double x, y, z; cin >> x >> y >> z;
    cout << "Komponente brzine? ";
    double vx, vy, vz; cin >> vx >> vy >> vz;
    tacke[i] = new Tacka (Vektor(x,y,z), Brzina(vx,vy,vz));
  }

  cout << "\nBroj koraka? "; int k; cin >> k;
  cout << "Trajanje koraka? "; double dt; cin >> dt;
  const Tacka org;
  cout << "ORG   " << org << "\n\n";

  for (int i=0; i<k; i++) {
    for (int j=0; j<n; tacke[j++]->proteklo(dt));
    double min = rastojanje(org, *tacke[0]); int m = 0;
    for (int j=1; j<n; j++) {
      double d = rastojanje(org, *tacke[j]);
      if (d < min) { min = d; m = j; }
    }
    cout << i << ' ' << *tacke[m] << ' ' << min << endl;
  }
  return 0;
}


zaboravih , .C je u windows-u .cpp
 
Sve je to ok. Snasao sam se za fiziku komplet, sve lepo uradio. Nadam se da radi :D

Eh sad...teske muke. Bacio se na ucenje c++a, imam nesto na engleskom, one teach urself c++ in 21 days, izdaje sams pubishing. onako, nije losha, ali je na engleskom. i sad - znam ja negleski, onako solidno, ali koliko razumem cemu klase sluze toliko ne razumem sve one kodove i ostale zayebancije.

Jel ima neko ovde nesto na cirilici da mi olaksa posao?
 
hvala. skinuo sam, pogledacu

video sam mail, sad cu i njega da skinem

nasao sam i neke ljude tu u gradu da cimam


iance da dodam - moram sad sebe da uzmem za primer, a vi cete se vec uklopiti u tu pricu.
priroda tezi ravnotezi. i jeste u ravnotezi.

ja vas cimam za neke stvari ovde, pitam, vi mi pricate - skupljam znanje iz programiranja
na drugim forumima, npr palanacke gimnazije, a i ovde ljudi isto tako pitaju svasta. npr jedan lik je prekjuce na pal. forumu pitao kako da pocne sa gitarom, koje pesme su zgodne za pocetak. ja sam mu, posto to znam, odgovorio poprilicno opsirno. isto tako sam ovom liku |^-^| ili kako vec se pise pre neki dan dao link za skidanje devc++ i rekao jos par korisnih stvari.

sta sam hteo reci - koliko ja pitam vas ovde, toliko odgovaram drugima negde
isto tako ste i vi pitali neke a sad odgovarate meni
ravnoteza

sad mogu da kazem samo - hvala sto ste ravnotezu uspostavili cineci tako uslugu meni


:lol:


sam u pravu?
 
Eeeee, dobro ti to za gitaru! I ja bih hteo da počnem, ali stvarno, ne zezam se! Jel bi mogao da mi pošalješ taj post sa tog foruma kao privatnu poruku na primer? Ili još bolje, daj adresu tog sajta!
 
damn it.

sve promenljive su float

kod (deo)

#include <math.h>

VAx = VAx - abs(VAx*(-ny)-VAy*(-nx))*(-nx) + abs(VBx*ny-VBy+nx)*nx;

poruka na kompajlovanju (za svaki red sa abs po jedna)

[Warning]pasing 'float' for converting 1 of 'int abs(int)'

uradim sve izraze peske, na papiru, i ispadne dobro. pustim isto to u program i izbaci nesto skroz debilno (vektor 1 x koordinata je neka cifra (normalna,ali pogresna), a za y i za vektor dva x i y izbaci 0 ?!)

a treba mi ta apsolutna vrednost, bez nje moram da kompletno preradjujem formule da bih dobio dobre smerove

nije valjda da abs radi samo sa integer?
 
Valjda.

Tebi treba "fabs()" funkcija koje to radi za floate, ili napishi sam svoju templejtovanu funkciju i budi siguran da radi ispravno za svaki tip.

A i chitanje helpa ne bi bila losha ideja
 
pa to sam i mislio da radim, ako nista drugo...

gledao sam help. al nisam nasao...zato sam i pitao ovde
(nisam bre ja .... breeee)

nasao sam jednu gresku, kod mnozenja vektora. posto sam radio sve ono na hartiji, taj deo sam u pesacenju preskakao, jer sam racunao napamet, ali sam napravio neku gresku i promasio tacno ta tri zadnja koja izbacuju 0 uvek...damn it. smucili mi se vektori

sad ce valjda da bude dobro :)


bice nesto od mene kako sam poceo :lol:
 
A možda da umesto abs-a koristi kvadrat pa koren... jeste malo tupavo, ali završava posao... valjda...

Ne, ne, ne, nikako....

abs/fabs koristi ako ti vec treba apsolutna vrednost (mada ne mogu da se setim gde to u fizici kretanja treba apsolutnih vrednosti... sve ti se manje-vishe svodi na proste rachunske operacije nad vektorima, plus Dot-product i Cross-product. Ovo znash shta je? Bez toga i ne pomishljaj da radish bilo shta sa fizikom i grafikom u igrama)
 
hehe, ***** li ga. prevedi na srpski pa moz da se desi i da znam :lol:

znam vektore na nivou trece godine gimnazije. dovoljno

trebalo mi negde kod mnozenja dva vektora. valjda. mada i meni bilo malo chudno

uostalom, evo sad cu da postaim ovde doc u kome sam pisao to sto se tice fizike. jos uvek u beta verziji :) treba da se jos lepo to sve sroci, da skonta narod kad cita o cemu se radi, al vi vec hocete. valjda. uostalom ako ne - pitajte

nasao sam gde pravi gresku, ali sad treba da lepo sve to izracunam i sklopim. doduse nesto mi ta formula sumnjiva, to sam prepisao sa jednog sajta, reko - aj da verujem coveku na rec, al zajba se izgleda :lol:

www.peruzzi.dzaba.com/rad/bilijar01.zip
160kb
 
cisto da javim da sam nasao gde mi je greska. sve je u redu, zajbale me zagrade [] koje su kompresijom slike postale | |, a i ja sam radio vektorski proizvod umesto skalarni. pogledao sam malopre dok sam kenjao matematiku i video gresku. sad sve radi kako treba

samo jos da napisem ceo program :lol:


(al dobro, najbitnije - resavanje sudara i ceo model - sam uradio...)
 
Ja mislim da ti peruci nisi sam sa sobom.Prvo kazes da je php i C skoro ista stvar,pa pitas dal moze iz unkcije da se zove ista ta funkcija,neznas sta je define a pravis sigricu...Nece to da ide...nemoj da s ljutis ali nerealno bre!
 
pa zar nije php u stvari ojadjeni c?

nece to da ide...ne bas divno doduse. al nekako se kotrlja

sad me nesto drnda instalacija za allegro nikako da poskidam sve fajlove sa neta (offline sam a mrzi me da trcim do net kluba) pa sam malo pauzirao da lepo proucim c++. a ovo sam kao sve sredio samo jos da lepo spakujem sve i da dodam grafiku pa da vidim kako ce da radi (ako ce da radi :lol: )

pomoz boze


(ne ljutim se, mislimo isto (najcrnje od svega))
 

Back
Top