Autor |
Beitrag |
perry5
      
Beiträge: 102
|
Verfasst: Do 01.02.07 17:53
1. Deine Variablen habne mal echt beschissene und extrem unaussagekräftige Namen. ein wenig mehr als vv oder p kann es shcon sein, oder? Wenigstens so: XPosKreis1 oder YSizeKreis2
2. Was meinst du andauernd mit Vokabeln???
3. Was genau sollst du jetzt machen? Will dein Lehrer, dass ihr 2 Rechtecke sich abstoßen lasst, die zufälligerweise aussehen wie Kreise?
So, Rechteckkollisions ist ein wenig schwerer als Kreiskollisiosn, aber so schwer nun auch nicht. Du musst einfach von jedem Punkt des ersten Rechtecks prüfen ob er im zweiten leigt und von jedem Punkt des zweiten ob er im ersten liegt. Wie genau die Bedingungen sind, findest du heraus, wenn du ein Blatt Papeir nimsmt und verschiedene Möglichkeiten aufzeichnest. Das sollte zu schaffen sein, sowas muss man als Programmierer tagtäglich machen, sich zu überlegen, wie man eine bestimmte Bedingung umsetzen und testen kann. Wenn man soetwas nur abschreibt lernt mans nie.Wenn du das also nicht schaffst, sagt deinem Lehrer du hättest die Hausaufgabe nicht gekonnt, und er soll das nochmal gescheit erklären.
Das du die tatsächliche Physikalisch korrekte Kollision von 2 Kugeln berechnen sollst halte ich jetzt mal für ausgeschlossen, das wäre viel zu kompliziert.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 01.02.07 18:52
perry5 hat folgendes geschrieben: | So, Rechteckkollisions ist ein wenig schwerer als Kreiskollisiosn |
Blödfug. Bei rechteckkollision reicht eine überprüfung der x und y Achse auf überschneidung, bei kreiskollision musst du mit trigonometrie arbeiten. Bei der Rechteckkollision kommst du sogar um ein mathematisches Vorwissen über Vektoren rum, wenn du dir die ganze sache gut vorstellen kannst. Du kannst, wie schon gesagt, bei 2 Rechtecken die Kollision durch genau 2 If-Abfragen ausdrücken, in denen nicht mehr Berechnung als + und - vorkommt.
Hier findest du alles, was du wissen musst, was die Kollision 2er Rechtecke betrifft.
Den Link solltest du dir auch anschauen, wenn es um 'echte' Kugeln geht, da er auch Grundlagen für die Kugelkollision enthält.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Do 01.02.07 18:58
Eigentlich habe ich Nala gemeint.
Ich konnte nur nicht ahnen, dass du, bevor ich fertig war, einen Beitrag schreibst.
An deiner Rechtschreibung habe ich wirklich nichts zu bemengeln.
Tut mir ebenfalls sehr leid.
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: Fr 02.02.07 17:23
hey leute!
also ich glaub dieser ganze thread ist ein missverständnis!!
ich habe wohl ziemlich für Verrwirrung gesorgt:D
also das ganze bezieht sich auf quadratische imgs.
das heißt:
ich habe ein quadratisches img erstellt und dann einen kreis dort hinein gezeichnet .
diese quadratischen imgs möchte ich nun von einander abprallen lassen wenn sie sich treffen .
dazu schonmal Sorry !
also nochmal neu
könnt ihr mir sagen ob und wenn ja wie man zwei quadratische img von einander abprallen lassen kann wenn sie sich treffen.
THX
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Fr 02.02.07 17:35
JayEff hat folgendes geschrieben: |
Hier findest du alles, was du wissen musst, was die Kollision 2er Rechtecke betrifft. |
*wiederhol*
Jakob_Ullmann hat folgendes geschrieben: | Eigentlich habe ich Nala gemeint.
Ich konnte nur nicht ahnen, dass du, bevor ich fertig war, einen Beitrag schreibst.
An deiner Rechtschreibung habe ich wirklich nichts zu bemengeln.
Tut mir ebenfalls sehr leid. |
Wollte damit nur sagen, dass Rechschreibung völlig egal ist, es versteht ja jeder, und das is das Delphi-Forum, nicht zu verwechseln mit dem Duden-Forum
Bei der Gelegenheit: Bemängeln kommt von "Mangel" und schreibt sich mit einem ä
Man bin ich böse!
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Zuletzt bearbeitet von JayEff am Fr 02.02.07 17:37, insgesamt 1-mal bearbeitet
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: So 04.02.07 15:03
hey leute!
danke für eure hilfe !!
also ich hab den folgenden quelltext eingegeben und das abstoßen hat funktioniert !
allerdings funktioniert das abprallen nur an den oberen und unteren seiten rechts und links hat es nicht funktioniert könnt ihr mir helfen??
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: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) ImReagenzglas: TImage; ImNa1: TImage; Timer1: TTimer; ImNa2: TImage; Schnell: TButton; Langsam: TButton; Stopp: TButton; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure SchnellClick(Sender: TObject); procedure LangsamClick(Sender: TObject); procedure StoppClick(Sender: TObject); private public end;
var Form1: TForm1; vv, vh, n, p:integer;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin ImNa1.canvas.ellipse(0,0,20,20); ImReagenzglas.canvas.ellipse(400,400,380,380); ImNa2.Canvas.ellipse(0,0,20,20); n:=7; p:=8; vv:=5; vh:=4; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin ImNa1.Top:=ImNa1.top+vv; ImNa1.left:=ImNa1.left+vh; ImNa2.top:=ImNa2.top+n; ImNa2.left:=ImNa2.left+p; if (ImNa1.top>200) then vv:=-vv; if (ImNa1.left>200) then vh:=-vh; if (ImNa1.top<20) then vv:=-vv; if (ImNa1.left<20) then vh:=-vh; if (ImNa2.left>200) then p:=-p; if (ImNa2.top>200) then n:=-n; if (ImNa2.left<20) then p:=-p; if (ImNa2.top<20) then n:=-n; if ((ImNa1.Top+ImNa1.Height > ImNa2.Top) and (ImNa1.Top<ImNa2.top+ImNa2.Height)) and ((ImNa1.Left < ImNa2.Left+ImNa2.Width) and (ImNa1.Left+ImNa1.Width > ImNa2.Left)) then begin vv:=-vv; vh:=-vh; end; end; |
EDIT//: der fehler is irgendwo beim lezten if satz 
|
|
|