dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Manupraat gruuta lieta...
Goto page 1, 2, 3  Next
 
dev.gamez.lv Forum Index -> Matemātika un fizika
View previous topic :: View next topic  
Author Message
Oma



Joined: 20 Mar 2006
Posts: 39

PostPosted: Wed May 17, 2006 2:29 pm    Post subject: Manupraat gruuta lieta...

taatad... man ir viens punkts kurš nemaina poziiciju un rotee ap savu vidu
un veel man ir punkts kas atrodas tieshi uz kursora koardinaataam un vajag izdariit taa lai pirmaa punkta ''prieksha'' atrodas pret otro punktu.
jaa un probleema ir taada ka nezinu kaa to izdariit Very Happy
Jaa un veel kaa veikt collision detection ar trijstuuriem.
un tas viss notiek ieksh 2D .
_________________


Back to top
View user's profile
DeRatizators



Joined: 27 Apr 2006
Posts: 492

PostPosted: Wed May 17, 2006 3:32 pm    Post subject:

Punktam nav ne gala,ne malas, ne vidus.

Varbūt domāji skatpunktu ? Ehhh, tik un taa sanaak bezsakars.
_________________
Any PANCAKE has to be long and thin and short and fat. Not to mention being an excellent insulator and a superb conductor.
Back to top
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Wed May 17, 2006 3:44 pm    Post subject:

Tu droshi vien domaaji objekts, nevis punkts.Un ja vajag lai tas objekts butu orientets uz otru objektu un ja tas ir C++ vienkarshi izmanto atan2 ieks <math.h> headera.Tas izrekjina arctangensu starp abiem punktiem-tas kas tev vajadzigs.Tatad-
Code:
PirmaPunktaLenkjis=atan2(PirmaPunktaXKoordinaata-OtraPunktaXKoordinaata,PirmaPunktaYKoordinaata-OtraPunktaYKoordinaata).

Un lieta darita.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed May 17, 2006 4:24 pm    Post subject:

Iekš C tas būtu math.h jā. Bet programmējot C++ iekļausim labāk pareizos headerus: #include <cmath> un std::atan2(..., ...);
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Wed May 17, 2006 4:58 pm    Post subject:

Nu ok <cmath>
P.S. to pashu <math.h> jau arii include'ojam tikai ar std namespace
Code:
// cmath standard header

#if     _MSC_VER > 1000
#pragma once
#endif

#ifndef _CMATH_
#define _CMATH_
#ifdef _STD_USING
 #undef _STD_USING
 #include <math.h>
 #define _STD_USING
#else
 #include <math.h>
#endif /* _STD_USING */
#endif /* _CMATH_ */

/*
 * Copyright (c) 1994 by P.J. Plauger.  ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
 */

_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
Oma



Joined: 20 Mar 2006
Posts: 39

PostPosted: Wed May 17, 2006 6:10 pm    Post subject:

Nu jaa es domaaju objekts un es nevis uz C++ bet delphi. Aa un par koliizijaam nevareetu luudzu palidzeet joar trijstuuriem nesaprotu.
_________________


Back to top
View user's profile
DeRatizators



Joined: 27 Apr 2006
Posts: 492

PostPosted: Wed May 17, 2006 7:27 pm    Post subject:

Smile
_________________
Any PANCAKE has to be long and thin and short and fat. Not to mention being an excellent insulator and a superb conductor.
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed May 17, 2006 9:27 pm    Post subject:

Ko no to trijstūru koližena tev vajag uzzināt? Vienu/visus krustpunktu(s), kurā(-ros) tie saduras? Vai tikai true/false, ja tie vispār saduras?
P.S. Padomā arī par topika nosaukumu kārtīgāk. Citādi citiem, kuriem interesētu līdzīgas lietas, būs grūtāk atrast atbildes.

elvman: es to zinu, ka MSVC tā dara (arī GCC tā dara), bet tas nav ne vienmēr obligāti tā visur.
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Wed May 17, 2006 9:34 pm    Post subject:

Quote:
elvman: es to zinu, ka MSVC tā dara (arī GCC tā dara), bet tas nav ne vienmēr obligāti tā visur.

Ok!Paldies bubu.To es nezinaju.Domaju,ka tas vajadzigs tikai kjeksha pec(t.i. std namespace).
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed May 17, 2006 9:46 pm    Post subject:

Nē nu tas jau ir "ķeksīša" pēc (std namespace). Jo C++ standartā rakstīts, ka cmath headerī vienmēr jābūt tādām un tādām un tādām funkcijām (std neimspeisā protams).
Tas, ka C++ kompilētājs to prosta realizē iekļaujot math.h failu tajā cmath failā, to standarts nenosaka.
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu May 18, 2006 11:20 am    Post subject:

Tā kā Oma neatbild, ko īsti viņam vajag, tad uzrakstīju vispārīgā variantā 2d trijstūru koliženu. Nekas grūts tur nav. Daži vienkārši ģeometriski aprēķini (2 līniju krustpunkta meklēšana). Diemžēl iekš C++. Slinkums bija freepaskālu vilkt un instalēt.
Code:
#define EPS 1e-5

struct vec2d
{
  float x, y;
  vec2d(float x=0, float y=0) : x(x), y(y) {}
};

bool getLineIntersectPoint(const vec2d& L1a, const vec2d& L1b,
                           const vec2d& L2a, const vec2d& L2b,
                           vec2d* Point)
{
  float tmp = (L2b.y-L2a.y)*(L1b.x-L1a.x) - (L2b.x-L2a.x)*(L1b.y-L1a.y);
  if (std::fabs(tmp) < EPS)
  {
    // parallelas liinijas
    return false;
  }

  float a = ( (L2b.x-L2a.x)*(L1a.y-L2a.y) - (L2b.y-L2a.y)*(L1a.x-L2a.x)) / tmp;
  float b = ( (L1b.x-L1a.x)*(L1a.y-L2a.y) - (L1b.y-L1a.y)*(L1a.x-L2a.x)) / tmp;

  if (a<0 || a>1 || b<0 || b>1)
  {
    // krustojums aarpus nogriezhnjiem
    return false;
  }

  Point->x = L1a.x + a * (L1b.x - L1a.x);
  Point->y = L1a.y + a * (L1b.y - L1a.y);

  return true;
}

bool intersectTri2D(const vec2d* T1, const vec2d* T2, std::vector<vec2d>* points)
{
  vec2d Point;

  points->clear();

  for (int i=0; i<3; i++)
    for (int j=0; j<3; j++)
      if (getLineIntersectPoint(T1[i], T1[(i+1)%3], T2[j], T2[(j+1)%3], &Point))
      {
        points->push_back(Point);
        // ja vajag tikai vienu krustpunktu, tad te vajag uzlikt return true
      }

  return !points->empty();
}


Demo programma: tri_demo.rar.
Pati source jāskatās ir iekš demo.cpp faila. Pārējais (include/lib) vajadzīgs priekš kompilēšanas - to izsauc ar _make_exe.bat failu (vajag būt uzinstalētam MinGW).
Back to top
View user's profile Send e-mail
gazz



Joined: 03 Jan 2004
Posts: 355
Location: Teika

PostPosted: Thu May 18, 2006 11:44 am    Post subject:

nedaudz oftopics par c++. bubu tu lieto gan const vec2d&, gan const vec2d* un veel std::vector<vec2d>* points. es taa padomaaju vai droshaak nebuutu visur lietot const vec2d& un std::vector<vec2d>& points. principaa peec idejas tam vajadzeetu aizsargaat no null pointera dotajaas funkcijaas, jo referenci var nodot tikai existeejosham objektam, ne taa? (taas tikai taadas idejas, vairaak jautaajums)
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu May 18, 2006 12:38 pm    Post subject:

Iespējams, ka drošāk būtu. Taču programmētājam jāsaprot, kur NULL drīkst padod un kur nē. Vēl jau protams var samest std::assert(points) un vajadzētu būt ok.

Pie tiem const vec2d* T vajag * lietot, jo tie ir masīvi. Var jau arī [] lietot, bet tad atkal nevarēs padot dinamiski izdalītu atmiņu.

Tajos const vec2d& L1a, referenci & lietoju tikai tāpēc, lai tiku netaisītas liekas kopijas.

A pie tiem vector<vec2d>* lietoju * tāpēc, ka mums te darbā kodēšanas standrtā teikts, ka atgriežamos mainīgos vajag nodot pēc pointera, lai izsaucamajā kodā var viegli redzēt, ka mainīgais tiks mainīts (tam priekšā būs & simbols). Citādi nevarētu atšķir, kurš & ir domāts tikai tāpēc, lai netaisītu kopijas, un kurš & domāts, lai varētu izmainīt padoto mainīgo. Kautkā esmu pasācis šo standartu ievērot arī savis rakstītajā kodā brīvajā laikā no darba ;)

Quote:
jo referenci var nodot tikai existeejosham objektam, ne taa?

Ne gluži, skat:
Code:
void func(int& i) { ... }
int* pi = new int(2);
int& i = *pi;
delete pi;
callFuncion(i);
Back to top
View user's profile Send e-mail
Oma



Joined: 20 Mar 2006
Posts: 39

PostPosted: Sat May 20, 2006 12:56 pm    Post subject:

Paldies par pal?dz?bu sakar? ar kol?zij?m bet man atkal rad?s probl?ma... K? iel?d?jot bildi var no t?s iz?emt melno vai balto kr?su man liekas ka to var ar kautk?du blendfunc nu bet j?s jau to noteikti zinat lab?k... ?? un es lietoju delphi 7 un opengl. Paldies jau iepriek?
_________________


Back to top
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sat May 20, 2006 1:00 pm    Post subject:

Ir divi veidi.
Pirmais-izej cauri visiem tekstuuras pixeljiem un, ja pixelis ir melns,tad uzliec tam alfa-0.
Otrais izmanto GLU (manupraat tur bija funkcija,kas to dara automaatiski).

Un tad vienkaarshi iesleedz alpha blending.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Matemātika un fizika All times are GMT + 2 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group