'**************************************************************************** 'Copyright Luberth Dijkman Bangert 23 1619 GJ Andijk Nederland 'E-mail luberth@wxs.nl 'Web Http://home.wxs.nl/~luberth '**************************************************************************** 'Calculate triangle made by mouse 'Requires quickbasic to run (QB.EXE /L) and a mouse 'This was a test program for rotating plotter knive control 'Rotate the knive in the direction of movement 'If you make any changes to this program that make's it better 'Please send me a copy? 'Have fun! '**************************************************************************** '$INCLUDE: 'qb.bi' DIM SHARED inreg AS RegTypeX DIM SHARED outreg AS RegTypeX CLS SCREEN 12 LOCATE 28, 5: PRINT "Luberth Dijkman - Http://home.wxs.nl/~luberth - luberth@wxs.nl." oldx = 400 oldy = 240 pi = 3.14159265359# inreg.ax = 1 inreg.bx = 0 inreg.cx = 0 inreg.dx = 0 CALL INTERRUPTX(&H33, inreg, outreg) LOCATE 1, 1: PRINT "inreg.ax = 1 "; "outreg.ax"; outreg.ax LOCATE 2, 15: PRINT "outreg.bx"; outreg.bx LOCATE 3, 15: PRINT "outreg.cx"; outreg.cx LOCATE 4, 15: PRINT "outreg.dx"; outreg.dx DO IF INKEY$ = CHR$(27) THEN END inreg.ax = 3 inreg.bx = 0 inreg.cx = 0 inreg.dx = 0 CALL INTERRUPTX(&H33, inreg, outreg) LOCATE 1, 31: PRINT "inreg.ax = 3 "; "outreg.ax"; outreg.ax LOCATE 2, 45: PRINT "outreg.bx"; outreg.bx LOCATE 3, 45: PRINT "outreg.cx"; outreg.cx LOCATE 4, 45: PRINT "outreg.dx"; outreg.dx newx = outreg.cx newy = outreg.dx LINE (oldx, oldy)-(newx, newy), 15 FOR t = 1 TO 2000: NEXT t LINE (oldx, oldy)-(newx, newy), 0 LINE (oldx, oldy)-(newx, oldy), 15 FOR t = 1 TO 2000: NEXT t LINE (oldx, oldy)-(newx, oldy), 0 LINE (newx, oldy)-(newx, newy), 15 FOR t = 1 TO 2000: NEXT t LINE (newx, oldy)-(newx, newy), 0 CIRCLE (oldx, oldy), 125, 15 IF newx = oldx AND newy < oldy THEN lengte = oldy - newy a = oldy - newy b = newx - oldx addegree = 0 degree = 0 END IF IF newx > oldx AND newy = oldy THEN lengte = newx - oldx a = oldy - newy b = newx - oldx addegree = 0 degree = 90 END IF IF newx = oldx AND newy > oldy THEN lengte = newy - oldy a = newy - oldy b = newx - oldx addegree = 0 degree = 180 END IF IF newx < oldx AND newy = oldy THEN lengte = oldx - newx a = oldy - newy b = oldx - newx addegree = 0 degree = 270 END IF IF newx > oldx AND newy < oldy THEN lengte = SQR((newx - oldx) * (newx - oldx) + (oldy - newy) * (oldy - newy)) a = oldy - newy b = newx - oldx addegree = 0 GOSUB calculatedegree degree = 90 - degree END IF IF newx < oldx AND newy < oldy THEN lengte = SQR((oldx - newx) * (oldx - newx) + (oldy - newy) * (oldy - newy)) a = oldy - newy b = oldx - newx addegree = 270 GOSUB calculatedegree END IF IF newx > oldx AND newy > oldy THEN lengte = SQR((newx - oldx) * (newx - oldx) + (newy - oldy) * (newy - oldy)) a = newy - oldy b = newx - oldx addegree = 90 GOSUB calculatedegree END IF IF newx < oldx AND newy > oldy THEN lengte = SQR((oldx - newx) * (oldx - newx) + (newy - oldy) * (newy - oldy)) a = newy - oldy b = oldx - newx addegree = 0 GOSUB calculatedegree degree = 270 - degree END IF LOCATE 10, 1: PRINT "a = "; a; " " LOCATE 11, 1: PRINT "b = "; b; " " LOCATE 12, 1: PRINT "lengte = "; lengte; " " LOCATE 14, 1: PRINT "a/lengte= "; ; a / lengte; " " IF a <> 0 AND b <> 0 THEN LOCATE 15, 1: PRINT "a/b= "; ; a / b; " " ELSE LOCATE 15, 1: PRINT "a/b= "; ; "a or b is zero (/0 Error)" END IF LOCATE 17, 1: PRINT "Degree's = "; degree + addegree; " " LOCATE 20, 1: PRINT "Stepper motor = "; CINT((degree + addegree) * 1.1111111#); "Steps " LOCATE 21, 1: PRINT "Stepper motor 400 steps per rotation!" IF a <> 0 AND b <> 0 THEN LOCATE 24, 1: PRINT "(ATN(a/b) * 180 / pi) = "; (ATN(a / b) * 180 / pi); "Degrees " END IF LOOP calculatedegree: ARCSIN(a / lengte) = ATN(a / lengte / SQR(1 - a / lengte * a / lengte)) degree = (ARCSIN(a / lengte) * 180 / pi) LOCATE 23, 1: PRINT "(ARCSIN(a/lengte) * 180 / pi) = "; (ARCSIN(a / lengte) * 180 / pi); "Degrees " RETURN