Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan > Spiele & OpenGL

Spiele & OpenGL Spiele in XProfan und Fragen zur Spieleprogrammierung

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26915, Antworten: 4218
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3326, Antworten: 122
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 312, Antworten: 19
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7643, Antworten: 185
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 20, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 23, Antworten: 0
Gehe zum ersten neuen Beitrag Acer Aspire 8745ZG fährt...
Aufrufe: 58, Antworten: 6
Gehe zum ersten neuen Beitrag Rechner fährt herunter,...
Aufrufe: 146, Antworten: 9
Gehe zum ersten neuen Beitrag avs4you_com Lizenz oder Abo?
Aufrufe: 71, Antworten: 4
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50944, Antworten: 1395
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25.02.2009, 19:50   #1 (Direktlink)
Ist öfter hier
 
Registriert seit: 21.02.2009
Beiträge: 71
Standard Berechnung von 2 vierecken, die sich überschneiden.

Wie kann man 2 Vierecke abfragen die sich überlappen mit den Überlappungspunkten in der Fläche?

mfg
profanfan ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 25.02.2009, 20:26   #2 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Wenn du wissen willst, ob sich zwei Rechtecke überschneiden, kannst du die API UnionRect() benutzen.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 25.02.2009, 21:35   #3 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Du kannst dir natürlich auch erst mal die XProfan-Funktionen @Intersect() und @Between (beide ab XProfan 11) anschauen.

Gruß
Roland
RGH ist offline   Mit Zitat antworten
Alt 25.02.2009, 21:57   #4 (Direktlink)
Ist öfter hier
 
Registriert seit: 21.02.2009
Beiträge: 71
Standard

Jup, danke.

mfg
profanfan ist offline   Mit Zitat antworten
Alt 25.02.2009, 22:15   #5 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Zitat:
Zitat von RGH Beitrag anzeigen
Du kannst dir natürlich auch erst mal die XProfan-Funktionen @Intersect() und @Between (beide ab XProfan 11) anschauen.

Gruß
Roland
Richtig, hatte ich ja selber noch angeregt...
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 25.02.2009, 22:22   #6 (Direktlink)
Ist öfter hier
 
Registriert seit: 21.02.2009
Beiträge: 71
Standard

Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Declare Function IntersectRect Lib "user32" Alias "IntersectRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long
An die IntersectRect-Funktion werden als Argumente drei Rechtecke (RECT) übergeben. Sie kontrolliert eine überlappung des zweiten und dritten Arguments und speichert das daraus resultierende übereinstimmung in das erste Argument. Außerdem gibt die Funktion den Wert "1" zurück, wenn es eine überschneidung gibt, und den Wert "0", wenn es keine übereinstimmung gibt.




Wie kann man das oben in Profan umsetzen?

Welche Struct wird da jetzt von Profan benutzt?




mfg

Geändert von profanfan (25.02.2009 um 22:34 Uhr)
profanfan ist offline   Mit Zitat antworten
Alt 25.02.2009, 22:24   #7 (Direktlink)
Ist öfter hier
 
Registriert seit: 21.02.2009
Beiträge: 71
Standard

@Intersect() und @Between

Ich benutze kein Opengl, sondern den normalen 2d-Modus.
kann das dann auch anwenden?
Gibt es dafür ein Beispielß

mfg
profanfan ist offline   Mit Zitat antworten
Alt 25.02.2009, 22:45   #8 (Direktlink)
Ist öfter hier
 
Registriert seit: 21.02.2009
Beiträge: 71
Standard

Ist diese Structur so richtig für den API-Aufruf?

declare rechteck1#,rechteck2#,rechteck3#,colli&

STRUCT rect1 = x&,y&,w&,h&
DIM rechteck1#, rect1
STRUCT rect2= x&,y&,w&,h&
DIM rechteck2#, rect2
STRUCT rect3 = x&,y&,w&,h&
DIM rechteck3#, rect3

colli&=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
profanfan ist offline   Mit Zitat antworten
Alt 25.02.2009, 23:02   #9 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Zitat:
Zitat von profanfan Beitrag anzeigen
@Intersect() und @Between

Ich benutze kein Opengl, sondern den normalen 2d-Modus.
kann das dann auch anwenden?
Gibt es dafür ein Beispiel?

mfg
Ja, man kann es auch für den ganz normalen 2d-Modus verwenden. Hier ein Beispiel (befindet sich auch in der Hilfe):

var r1# = new(xpRect)
var r2# = new(xpRect)
r1#.posx! = 0
r1#.posy! = 0
r1#.x! = 10
r1#.y! = 10
r2#.posx! = 10
r2#.posy! = 10
r2#.x! = 10
r2#.y! = 10
print intersect("r", r1#, r2#)
waitinput


Gruß
Roland
RGH ist offline   Mit Zitat antworten
Alt 25.02.2009, 23:16   #10 (Direktlink)
Ist öfter hier
 
Registriert seit: 21.02.2009
Beiträge: 71
Standard

Habe hier mal auch von der API gestestet.
Funktioniert aber nicht.
Zumindest müsste es doch rechnerisch hinhauen.
Es wird immer "0" ausgegeben.
Und beim verlassen des Programms, ein Absturz.


Code:
$H Windows.ph
$H Messages.ph

Window 20,20-700,600

declare rechteck1#,rechteck2#,rechteck3#,colli%

STRUCT rect1 = x1%,y1%,w1%,h1%
DIM rechteck1#, rect1
STRUCT rect2= x2%,y2%,w2%,h2%
DIM rechteck2#, rect2
STRUCT rect3 = x3%,y3%,w3%,h3%
DIM rechteck3#, rect3

var hWin% = @Create("Window", %hWnd, "auto", 250,50, 500,500)

var bild_auto%=Create("hPic",-1,"auto.bmp")

declare x1%,y1%,xx1%,yy1%

x1%=50
y1%=50
xx1%=200
yy1%=200

var ende% = 0

StartPaint hwin%
   DrawPic bild_auto%,xx1%,yy1%;0
EndPaint

WhileNot ende%

  sleep 1
  
  if isKey(65)
    ende% = 1
  endif
  
  if isKey(69)
    x1%=x1%+1
    StartPaint hwin%
      DrawPic bild_auto%,x1%,y1%;-1
    EndPaint
    cls
    With rechteck1#
      .x1%=0
      .y1%=0
      .w1%=0
      .h1%=0
    EndWith
    With rechteck2#
      .x2%=x1%
      .y2%=y1%
      .w2%=64
      .h2%=64
    EndWith
    With rechteck3#
      .x3%=200
      .y3%=200
      .w3%=64
      .h3%=64
    EndWith
    colli%=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
    print colli%
  endif
  
  if isKey(81)
    x1%=x1%-1
    StartPaint hwin%
      DrawPic bild_auto%,x1%,y1%;-1
    EndPaint
    cls
    With rechteck1#
      .x1%=0
      .y1%=0
      .w1%=0
      .h1%=0
    EndWith
    With rechteck2#
      .x2%=x1%
      .y2%=y1%
      .w2%=64
      .h2%=64
    EndWith
    With rechteck3#
      .x3%=200
      .y3%=200
      .w3%=64
      .h3%=64
    EndWith
    colli%=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
    print colli%
  endif
  
  if isKey(83)
    y1%=y1%+1
    StartPaint hwin%
      DrawPic bild_auto%,x1%,y1%;-1
    EndPaint
    cls
    With rechteck1#
      .x1%=0
      .y1%=0
      .w1%=0
      .h1%=0
    EndWith
    With rechteck2#
      .x2%=x1%
      .y2%=y1%
      .w2%=64
      .h2%=64
    EndWith
    With rechteck3#
      .x3%=200
      .y3%=200
      .w3%=64
      .h3%=64
    EndWith
    colli%=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
    print colli%
  endif
  
  if isKey(87)
    y1%=y1%-1
    StartPaint hwin%
      DrawPic bild_auto%,x1%,y1%;-1
    EndPaint
    cls
    With rechteck1#
      .x1%=0
      .y1%=0
      .w1%=0
      .h1%=0
    EndWith
    With rechteck2#
      .x2%=x1%
      .y2%=y1%
      .w2%=64
      .h2%=64
    EndWith
    With rechteck3#
      .x3%=200
      .y3%=200
      .w3%=64
      .h3%=64
    EndWith
    colli%=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
    print colli%
  endif
  
EndWhile

End
profanfan ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 25.02.2009, 23:48   #11 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Hallo,

die Elemente der RECT-Struktur sind Longints, also muss hier das & verwendet werden. (Bei Strukturen gibt es einen Unterschied zwischen % (2 Byte) und & (4 Byte)!).

Außerdem muß die Struktur nur einmal definiert werden und kann dann auf die drei Bereiche angewandt werden:

Code:
STRUCT rect = x&,y&,w&,h&
DIM rechteck1#, rect
DIM rechteck2#, rect
DIM rechteck3#, rect
Weiter unten dann:

Code:
    With rechteck1#
      .x& = 0
      .y& = 0
      .w& = 0
      .h& = 0
    EndWith
    With rechteck2#
      .x& = x1%
      .y& = y1%
      .w& = 64
      .h& = 64
    EndWith
    With rechteck3#
      .x& = 200
      .y& = 200
      .w& = 64
      .h& = 64
    EndWith
RGH ist offline   Mit Zitat antworten
Alt 26.02.2009, 00:17   #12 (Direktlink)
Ist öfter hier
 
Registriert seit: 21.02.2009
Beiträge: 71
Standard

Jup, jetzt werden alle 5 werte richtig ausgegeben.
Das überschneidende Rechteck ist eine tolle Sache mit dem Maßen.

Kannst du noch einmal, nach dem Ogl-Speicher-Bild schauen? im anderern Thread.

danke.

mfg
profanfan ist offline   Mit Zitat antworten
Alt 26.02.2009, 14:09   #13 (Direktlink)
Ist öfter hier
 
Registriert seit: 21.02.2009
Beiträge: 71
Standard

Mal eine kleine Demo mit 2 Quadraten, davon wird das eine mit den Tasten "q,w,e,s" gesteuert.
Die überschneidenden Werte werden im Fenster ausgegeben.
Interessant sind die Daten, von der Fläche der beiden sich überschneidenden Quadrate. Damit kann man eigentlich eine schnelle präzise Punktauswerung herstellen, die dann mit XPIA und/oder Profan2Cpp beschleunigt wird.

Code:
$H Windows.ph
$H Messages.ph

proc collison
  StartPaint hwin&
      DrawPic hintergr&,0,0;0
      DrawPic bild_block&,xx1&,yy1&;0
      DrawPic bild_auto&,x1&,y1&;0
    EndPaint
  With rechteck1#
      .x& = 0
      .y& = 0
      .w& = 0
      .h& = 0
    EndWith
    With rechteck2#
      .x& = x1&
      .y& = y1&
      .w& = x1&+64
      .h& = y1&+64
    EndWith
    With rechteck3#
      .x& = 200
      .y& = 200
      .w& = 264
      .h& = 264
    EndWith
    cls
    colli&=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
    print colli&
    print rechteck1#.x&;" ";rechteck1#.y&;" ";rechteck1#.w&;" ";rechteck1#.h&
endproc
    

Window 20,20-200,100

declare rechteck1#,rechteck2#,rechteck3#
declare x1&,y1&,xx1&,yy1&,colli&
declare hWin&,bild_auto&,bild_block&,hintergr&,ende& 

STRUCT rect = x&,y&,w&,h&
DIM rechteck1#, rect
DIM rechteck2#, rect
DIM rechteck3#, rect

hWin& = @Create("Window", %hWnd, "auto", 250,50, 500,500)

bild_auto&=Create("hnewpic",64,64,$0000ff)
bild_block&=Create("hnewpic",64,64,$ff0000)
hintergr&=create("hnewpic",500,500,$00ffff)
ende& = 0

x1&=50
y1&=50
xx1&=200
yy1&=200

WhileNot ende&
  sleep 1
  
  if isKey(65)
    ende& = 1
  endif
  
  if isKey(69)
    x1&=x1&+1
    collison
  endif
  
  if isKey(81)
    x1&=x1&-1
    collison
  endif
  
  if isKey(83)
    y1&=y1&+1
    collison
  endif
  
  if isKey(87)
    y1&=y1&-1
    collison
  endif
  
EndWhile

End
profanfan ist offline   Mit Zitat antworten
Alt 26.02.2009, 17:43   #14 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Zitat:
Interessant sind die Daten, von der Fläche der beiden sich überschneidenden Quadrate. Damit kann man eigentlich eine schnelle präzise Punktauswerung herstellen, die dann mit XPIA und/oder Profan2Cpp beschleunigt wird.
Ich benutze das in ähnlicher Form schon lange zu solchen Zwecken, u.a. in der ProSpeed.dll.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 26.02.2009, 21:59   #15 (Direktlink)
Ist öfter hier
 
Registriert seit: 21.02.2009
Beiträge: 71
Standard

Und warum wird damit nicht mal rausgerückt...hääää...

Ist in der Prosspeed aber als dll verkappselt....nicht reconstruierbar...oder?

Hätte doch unser Profanconstructeur gut als Befehl mit einbauen können.

mfg
profanfan ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan > Spiele & OpenGL

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
USB Laufwerke überschneiden sich. Was tun? sc20k Windows XP 8 19.03.2008 17:36
speicherplatz berechnung Tim25 Allgemein 1 14.02.2007 19:27
berechnung von clustergröße einer HDD nagg Allgemein 1 01.09.2005 17:46
USB Geräte überschneiden sich? diggler0221 Hardware - Problemlösungen 2 02.01.2005 11:15
Berechnung Stromverbrauch bei Notebook tronixx Hardware - Problemlösungen 15 05.08.2004 14:08



Alle Zeitangaben in WEZ +2. Es ist jetzt 06:14 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2