hi oder auch Guten morgen
also ich arbeite mit Borland Builder 3 (aus Gründen der Kompatibilität im Schulunterricht). ich habe ein Projekt mit der klasse Kreis, Rechteck und Kugel.
ich erzeuge auf/in einer Form auf einer Image Komponente mit der klasse rechteck einen hintergrund mit belibiger farbe (frei wählbar über den farbdialog)
und mit der klasse kugel (abgeleitet von Kreis) 2 Kreise. verschieben tu ich sie indem ich ein kreis mit der hintergrundfarbe drüber zeichne. ich arbeite nach dem Winke-Verfahren. das heisst ich gebe der klasse/objekt einen Winkel und den lass ich mit SIN/COS umrechnen
X=SIN * SPEED
Y=COS * SPEED
soweit ganz einfach. nun habe ich auch schon die Kollisionsabfrage der wände / Ränder eingebaut mit "wenn Kugelx >Rahmen..." ja nun wollte ich eine kollisionsabfrage machen der 2 Kreise. aber ich schaff es nicht das sie Korreckt von ein ander abprallen . die erkennung wann sie sich berühren habe ich per Satz des Pythagoras gelöst (möchte nciht weiter drazuf eingehen bei nachfrage PN) .
hier mein ansatz zur berechnung des abbpralls:
ich berechne die Achse wo die kreise Virtuell abprallen mittels des Tangens von Alpha + 90° in meinem mit dem Satz des Pyth. erstellten Dreiecks. die "kugel hab ich in 4 Quadrenten mit jeh 2 unterQuadranten eingeteilt.
von 0°-90° .... (bis 360)
und die 0°-90° wieda in 2x 45°
hier der Code
posX2 wird übergeben ist die gegenüberliegende Kugel Xpos
achse ist die achse zwischen den kugeln
PS: ich habe überprüft ob die achse stimmt und alles richtig berechnet wird. und auf dem papier hab ich es nachgerechnet
ich Freue mich auf antworten und hoffei ch hab euch nciht zu sehr verwirrt
also ich arbeite mit Borland Builder 3 (aus Gründen der Kompatibilität im Schulunterricht). ich habe ein Projekt mit der klasse Kreis, Rechteck und Kugel.
ich erzeuge auf/in einer Form auf einer Image Komponente mit der klasse rechteck einen hintergrund mit belibiger farbe (frei wählbar über den farbdialog)
und mit der klasse kugel (abgeleitet von Kreis) 2 Kreise. verschieben tu ich sie indem ich ein kreis mit der hintergrundfarbe drüber zeichne. ich arbeite nach dem Winke-Verfahren. das heisst ich gebe der klasse/objekt einen Winkel und den lass ich mit SIN/COS umrechnen
X=SIN * SPEED
Y=COS * SPEED
soweit ganz einfach. nun habe ich auch schon die Kollisionsabfrage der wände / Ränder eingebaut mit "wenn Kugelx >Rahmen..." ja nun wollte ich eine kollisionsabfrage machen der 2 Kreise. aber ich schaff es nicht das sie Korreckt von ein ander abprallen . die erkennung wann sie sich berühren habe ich per Satz des Pythagoras gelöst (möchte nciht weiter drazuf eingehen bei nachfrage PN) .
hier mein ansatz zur berechnung des abbpralls:
ich berechne die Achse wo die kreise Virtuell abprallen mittels des Tangens von Alpha + 90° in meinem mit dem Satz des Pyth. erstellten Dreiecks. die "kugel hab ich in 4 Quadrenten mit jeh 2 unterQuadranten eingeteilt.
von 0°-90° .... (bis 360)
und die 0°-90° wieda in 2x 45°
hier der Code
PHP:
// ---- FALL 0° - 90° -------------------------------
if ((posX < posX2 && posY > posY2))
{
achse = ((180 * atan2(katheteY, katheteX)) / Pi) * -1 + 90;
if (achse + 90 < 45)
{
Winkel = (Winkel + achse) * -1;
//Winkel = 1;
} else {
Winkel = (Winkel - achse) * -1 + 180;
//Winkel = 2;
}
}
// ---- FALL 90° - 180° -------------------------------
if ((posX > posX2 && posY > posY2))
{
achse = ((180 * atan2(katheteY, katheteX)) / Pi) * -1 + 90;
if (achse + 90 < 45 + 90)
{
Winkel = (Winkel + achse) * -1;
//Winkel = 3;
} else {
Winkel = (Winkel - achse) + 180;
// Winkel = 4;
}
}
// ---- FALL 180° - 270° -------------------------------
if ((posX > posX2 && posY < posY2))
{
achse = ((180 * atan2(katheteY, katheteX)) / Pi) * -1 + 90;
if (achse + 270 < 45 + 180)
{
Winkel = (Winkel + achse) * -1;
//Winkel = 5;
} else {
Winkel = (Winkel - achse) * -1 + 180;
//Winkel = 6;
}
}
// ---- FALL 270° - 0° (360°)----------------------------
if ((posX < posX2 && posY < posY2))
{
achse = ((180 * atan2(katheteY, katheteX)) / Pi) * -1 + 90;
if (achse + 270 < 45 + 270)
{
Winkel = (Winkel + achse) * -1;
//Winkel = 7;
} else {
Winkel = (Winkel - achse) + 180;
//Winkel = 8;
}
}
posX2 wird übergeben ist die gegenüberliegende Kugel Xpos
achse ist die achse zwischen den kugeln
PS: ich habe überprüft ob die achse stimmt und alles richtig berechnet wird. und auf dem papier hab ich es nachgerechnet
ich Freue mich auf antworten und hoffei ch hab euch nciht zu sehr verwirrt