Umsetzung vom c nach Purebasic ?

Anfängerfragen zum Programmieren mit PureBasic.
dater
Beiträge: 43
Registriert: 14.01.2006 15:22

Umsetzung vom c nach Purebasic ?

Beitrag 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;


Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
PureProgger
Beiträge: 40
Registriert: 19.12.2006 18:38

Beitrag von PureProgger »

Die Funktionen sind in Pascal geschrieben, nicht C/C++!
Min -> den kleinsten Wert ermitteln
Max -> den größten....

gruß
PB 4.30
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
dater
Beiträge: 43
Registriert: 14.01.2006 15:22

Proceduren umstellung

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

guck mal im englischen PB-Forum, da kannst du beispiele in PB finden...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten