Autor Beitrag
perry5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 01.02.07 18:52 
user profile iconperry5 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Fr 02.02.07 17:35 
user profile iconJayEff hat folgendes geschrieben:

Hier findest du alles, was du wissen musst, was die Kollision 2er Rechtecke betrifft.

*wiederhol*

user profile iconJakob_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- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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??

ausblenden volle Höhe Delphi-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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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>200then
vv:=-vv;
if (ImNa1.left>200then
vh:=-vh;
if (ImNa1.top<20)  then
vv:=-vv;
if (ImNa1.left<20then
vh:=-vh;
if (ImNa2.left>200then
p:=-p;
if (ImNa2.top>200then
n:=-n;
if (ImNa2.left<20then
p:=-p;
if (ImNa2.top<20then
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 ;)