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;