Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
void CVector2D::normalize() { int len = GetLength(); if(len != 0) { _X /= len; _Y /= len; } else _X = _Y = 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
CVector2D N = Normalize(vecPos2-vecPos1); CVector2D O = CVector2D(-N._Y,N._X); float mass = 0.7f; float Speed1 = mass * GetLength(Normalize(vec1*N)); float Speed2 = mass * GetLength(Normalize(vec2*N)); // Wenn beide in gleiche Richtung fliegen if((vec1._X / abs(vec1._X)) == (vec2._X / abs(vec2._X))&& (vec1._Y / abs(vec1._Y)) == (vec2._Y / abs(vec2._Y))) { vec1 =((N*(-2*DotProduct(vec1,N))) - vec1)* Speed2; vec2 =((N*(-2*DotProduct(vec2,N))) - vec2)* Speed1; } else { vec1 =((O*(-2*DotProduct(vec1,O))) - vec1)* Speed2; vec2 =((O*(-2*DotProduct(vec2,O))) - vec2)* Speed1; } vecPos2 = vecPos1+N*15; |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »marfi« (26.10.2012, 12:35)
C-/C++-Quelltext |
|
1 2 |
v1 = v1*dot(v1,o)-normalize(v1*dot(v1,d))*speed2; v2 = v2*dot(v2,o)-normalize(v2*dot(v2,d))*speed1; |
C-/C++-Quelltext |
|
1 2 |
v1 = o*dot(v1,o)-normalize(d*dot(v1,d))*speed1; v2 = o*dot(v2,o)-normalize(d*dot(v2,d))*speed2; |
C-/C++-Quelltext |
|
1 2 |
float speed1 = length(v1*dot(v1,d)); float speed2 = length(v2*dot(v2,d)); |
C-/C++-Quelltext |
|
1 2 |
float speed1 = Math.Abs(v1.DotProduct(d)); float speed2 = Math.Abs(v2.DotProduct(d)); |
Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »CBenni::O« (28.10.2012, 16:26)
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
Vector2 innorm1 = norm * Vector2.DotProduct(vel1, norm); // vec1-Komponente entlang norm Vector2 innorm2 = norm * Vector2.DotProduct(vel2, norm); // vec2-Komponente entlang norm Vector2 inorth1 = orth * Vector2.DotProduct(vel1, orth); // vec1-Komponente entlang orth Vector2 inorth2 = orth * Vector2.DotProduct(vel2, orth); // vec2-Komponente entlang orth vel1 = inorth1 + innorm2; vel2 = inorth2 + innorm1; |
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »CBenni::O« (28.10.2012, 16:41)
C-/C++-Quelltext |
|
1 2 3 |
Vector2 mid = (pos1+pos2)/2; pos1 = mid-norm*r1; pos2 = mid+norm*r2; |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »marfi« (29.10.2012, 22:01)
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
D:\Eigene Dateien\Downloads\Koll_Test_V1.1\Koll_Test ../EoD_Debug/media/hud/arrow.png : Invalid data D:\Eigene Dateien\Downloads\Koll_Test_V1.1\Koll_Test ../EoD_Debug/media/hud/arrow.png : Invalid data D:\Eigene Dateien\Downloads\Koll_Test_V1.1\Koll_Test ..\media\boid.png : Invalid data D:\Eigene Dateien\Downloads\Koll_Test_V1.1\Koll_Test ..\media\Grid.png : Invalid data D:\Eigene Dateien\Downloads\Koll_Test_V1.1\Koll_Test ..\media\Boid.png : Invalid data |
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »CBenni::O« (30.10.2012, 09:35)
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
void CBall_Object::update(float fElapsedTime) { CVector2D vecPos = GetvecPosition(); if(m_vecVelocity._X > ballNS::MAX_VEL) m_vecVelocity._X = ballNS::MAX_VEL; if(m_vecVelocity._Y > ballNS::MAX_VEL) m_vecVelocity._Y = ballNS::MAX_VEL; vecPos += (m_vecVelocity * fElapsedTime); if(vecPos._X < 0) { vecPos._X = 1; m_vecVelocity._X = -m_vecVelocity._X; } if(vecPos._X > 1000) { vecPos._X = 999; m_vecVelocity._X = -m_vecVelocity._X; } if(vecPos._Y < 0) { vecPos._Y = 1; m_vecVelocity._Y = -m_vecVelocity._Y; } if(vecPos._Y > 700) { vecPos._Y = 699; m_vecVelocity._Y = -m_vecVelocity._Y; } SetvecPosition(vecPos); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
void CPhysics::CircleCollision( CVector2D& vec1, CVector2D& vec2, CVector2D& vecPos1, CVector2D& vecPos2, bool bRigidBody, float fElapsedTime ) { // Vebindungsvektor (normiert): CVector2D N = Normalize(vecPos2-vecPos1); CVector2D O = CVector2D(-N._Y,N._X); float mass = 0.9f; /* vec1 = O*DotProduct(vec1,O)-Normalize(N*DotProduct(vec1,N))*Speed2; vec2 = O*DotProduct(vec2,O)-Normalize(N*DotProduct(vec2,N))*Speed1; */ CVector2D innorm1 = N * DotProduct(vec1,N); // vec1-Komponente entlang norm CVector2D innorm2 = N * DotProduct(vec2,N); // vec2-Komponente entlang norm CVector2D inorth1 = O * DotProduct(vec1,O); // vec1-Komponente entlang orth CVector2D inorth2 = O * DotProduct(vec2,O); // vec2-Komponente entlang orth vec1 = (inorth1 + innorm2)*mass; vec2 = (inorth2 + innorm1)*mass; CVector2D mid = (vecPos1+vecPos2)/2; vecPos1 = mid-N*6; vecPos2 = mid+N*6; //vecPos2 = vecPos1+N*13; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
QueryPerformanceCounter(&timeStart); // get starting time m_rdc.run(m_pPairs, &m_arrBalls,X_AXIS,Y_AXIS,bBruteForce); QueryPerformanceCounter(&timeEnd); // get end time for (int i=0; i< m_nBallCount; i++) { m_pBallObj = (CBall_Object*)m_arrBalls.GetAt(i); if(m_pBallObj) { if(m_pBallObj->GetbCollide()) { m_EnemyObj->m_nCount++; //m_pBallObj->Intersection(*m_pBallObj); if((m_pBallObj)&&(m_pBallObj->GetpKollPartner())) m_pPhys->CircleCollision(m_pBallObj->m_vecVelocity, ((CBall_Object*)m_pBallObj->GetpKollPartner())->m_vecVelocity,m_pBallObj->GetvecPosition(), m_pBallObj->GetpKollPartner()->GetvecPosition(),true,fElapsedTime); } if(GetGameApp()->m_bBallsVisible) GetGameApp()->CallGrafikDevice()->CallSpriteManager()->Render(GetGameApp()->m_uTextureID[2],M3DVector(m_pBallObj->GetvecPosition()._X, m_pBallObj->GetvecPosition()._Y,0)); } |
Werbeanzeige