Type question in a function

Started by Frank Brübach, February 25, 2025, 02:34:41 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Frank Brübach

Hello.. I have translated a freebasic Code to o2 only the Print result makes trouble.

' inBetween exists for 3 variants, one dimensional number line ,
' for 2-dimensional also for a 3-dimensional field.
' oxygen

uses console

TYPE Coord
    X AS DOUBLE
    Y AS DOUBLE
END TYPE

TYPE Vector
    X AS DOUBLE
    Y AS DOUBLE
    Z AS DOUBLE
END TYPE


dim cr as string = chr(13,10)

FUNCTION InBetween1D(A AS DOUBLE, B AS DOUBLE, P AS DOUBLE) AS BYTE
    IF A < B THEN
        IF (A <= P) AND (P <= B) THEN
            RETURN -1
        ELSE
            RETURN 0
        END IF
    ELSEIF A > B THEN
        IF (B <= P) AND (P <= A) THEN
            RETURN -1
        ELSE
            RETURN 0
        END IF
    END IF
END FUNCTION

FUNCTION InBetween2D(A AS Coord, B AS Coord, P AS Coord) AS BYTE
    IF inBetween1D(A.X, B.X, P.X) THEN
        IF inBetween1D(A.Y, B.Y, P.Y) THEN
            RETURN -1
        ELSE
            RETURN 0
        END IF
    ELSE
        RETURN 0
    END IF
END FUNCTION

FUNCTION InBetween3D(A AS Vector, B AS Vector, P AS Vector) AS BYTE
    IF inBetween1D(A.X, B.X, P.X) THEN
        IF inBetween1D(A.Y, B.Y, P.Y) THEN
            IF inBetween1D(A.Z, B.Z, P.Z) THEN
                RETURN -1
            ELSE
                RETURN 0
            END IF
        ELSE
            RETURN 0
        END IF
    ELSE
        RETURN 0
    END IF
END FUNCTION

'test

dim ax as vector

'PRINT InbetWeen3D(ax.x(10,10,10),ax.y(20,20,20),ax.z(15,15,9)) cr ' no go

' how to translate this function including a type statement ? better using a class ?
PRINT InBetween3D(ax(10,10,10),ax(20,20,20),ax(15,15,9)) cr
PRINT InBetween3D(ax(10,10,10),ax(20,20,20),ax(15,15,15)) cr
PRINT InBetween3D(ax(10,10,10),ax(20,20,20),ax(15,15,8)) cr

' original code below freebasic
'PRINT InbetWeen3D(TYPE(10,10,10),TYPE(20,20,20),TYPE(15,15,9)) ' 0 'out
'PRINT InbetWeen3D(TYPE(10,10,10),TYPE(20,20,20),TYPE(15,15,15)) ' -1 'in
'PRINT InBetween3D(TYPE(10,10,10),TYPE(20,20,20),TYPE(15,15,8)) ' 0 'out

print "ok"
wait


Charles Pegge

Hi Frank,

It needs to be split:
'dim ax as vector
dim as vector v1,v2,v3
v1={10,10,10}
v2={20,20,20}
v3={15,15,19} 'was{15,15,19}
print Inbetween3d (v1,v2,v3) cr '255
print Inbetween3d (v1,v3,v2) cr '0