Seite 1 von 1

Umsetzung vom c nach Purebasic ?

Verfasst: 01.08.2008 12:51
von dater
Hallo,
ich habe zwei C-Proceduren nach Purebasic umgeschrieben, aber es geht nicht ? Was mach min und max in C ?
Ich will ein 'MouseOverLine' schreiben.

Code: Alles auswählen

Procedure.f min(a.f,b.f)
If a<b 
	ProcedureReturn a
Else
	ProcedureReturn b
EndIf
EndProcedure

Procedure.f max(a.f,b.f)
If a>b 
	ProcedureReturn a
Else
	ProcedureReturn b
EndIf

EndProcedure
Procedure.f DistPoint(X.f,Y.f,X1.f, Y1.f, X2.f,Y2.f)
Protected sx.f,sy.f,m1.f,m2.f
;Prüfe ob Vertikal
 If X1 = X2 
 	ProcedureReturn Abs(X1-X)
 EndIf
;Prüfe ob Horizontal
 If Y1 = Y2 
 	ProcedureReturn Abs(Y1-Y)
EndIf
;Prüfe Schräg
;Verschiebung der Koordinaten nach Null
 X2=X2-X1
 Y2=Y2-Y1
 X=X-X1
 Y=Y-Y1
;// NUR der Ordnung halber X1=0: Y1=0;
 m1=Y2/X2; //Steigung der Geraden
 m2=1/m1; //Steigung der lotrechten Geraden
 Sx=(m2*X+Y)/(m1+m2); //Schnittpunkt X
 Sy=m2*(Sx-X)+Y; //Schnittpunkt Y
 ProcedureReturn Sqr(Sqr(X-Sx)+Sqr(Y-Sy)); //Distanz
EndProcedure

Procedure.l ISNearLine(X.f,Y.f,X1.f,Y1.f,X2.f,Y2.f, Dist.f )
;//Prüfe ob im Rechteck
If  (X>= min(X1,X2)-Dist) And (X <= max(X1,X2)+Dist) And (Y >= min(Y1,Y2)-Dist) And (Y <= max(Y1,Y2)+Dist)
If DistPoint(X,Y,X1,Y1,X2,Y2)<= Dist.f
	ProcedureReturn #True
EndIf
EndIf
EndProcedure

;------------------------------------------------------------------------------------------------------

function DistPoint(X,Y,X1, Y1, X2,Y2: Integer): Double;
VAR
 sx,sy,m1,m2 : Double;
BEGIN
//Prüfe ob Vertikal
 IF X1 = X2 Then BEGIN Result:=Abs(X1-X); Exit; End;
//Prüfe ob Horizontal
 IF Y1 = Y2 Then BEGIN Result:=Abs(Y1-Y); Exit; End;

//Prüfe Schräg

//Verschiebung der Koordinaten nach Null
 X2:=X2-X1;
 Y2:=Y2-Y1;
 X:=X-X1;
 Y:=Y-Y1;
// NUR der Ordnung halber X1:=0; Y1:=0;
 m1:=Y2/X2; //Steigung der Geraden
 m2:=1/m1; //Steigung der lotrechten Geraden
 Sx:=(m2*X+Y)/(m1+m2); //Schnittpunkt X
 Sy:=-m2*(Sx-X)+Y; //Schnittpunkt Y
 Result:=Sqrt(Sqr(X-Sx)+Sqr(Y-Sy)); //Distanz
end;

function ISNearLine(X,Y,X1,Y1,X2,Y2, Dist : Integer) : Boolean;
BEGIN
 //Prüfe ob im Rechteck
 Result:=(X >= min(X1,X2)-Dist) AND (X <= max(X1,X2)+Dist)
    AND (Y >= min(Y1,Y2)-Dist) AND (Y <= max(Y1,Y2)+Dist);
 //JA:Prüfe Distanz
 IF Result Then Result:=(DistPoint(X,Y,X1,Y1,X2,Y2)<= Dist);
End;



Verfasst: 01.08.2008 13:18
von Kaeru Gaman
> C-Proceduren
die du da an den code angehängt hast?
das ist kein C...
sieht aus wie Pascal/Delphi

> aber es geht nicht ?
was geht nicht...

> Was mach min und max in C ?
das musst du doch wissen, ist doch deine Entwicklungsumgebung, du hast die Doku.

Verfasst: 01.08.2008 15:52
von PureProgger
Die Funktionen sind in Pascal geschrieben, nicht C/C++!
Min -> den kleinsten Wert ermitteln
Max -> den größten....

gruß

Verfasst: 01.08.2008 16:03
von ts-soft
Man sollte auch gleiche Typen nutzen. Die Pascal-Routine "DistPoint"
erwartet als Parameter Longs (Integer) und gibt ein Double zurück.
Die PB-Routine arbeitet mit Floats!

Proceduren umstellung

Verfasst: 01.08.2008 21:20
von dater
Hi,
den Pascal oder C Code ?! habe ich im Internet, als Beispiel für ein MouseOverLine gefunden, der Code ist nicht von mir.


Dater.

Verfasst: 01.08.2008 21:30
von Kaeru Gaman
guck mal im englischen PB-Forum, da kannst du beispiele in PB finden...