diff --git a/a.sml b/a.sml new file mode 100644 index 0000000..3e0dbcc --- /dev/null +++ b/a.sml @@ -0,0 +1,27 @@ +structure LowerCaseA = +struct + fun lerp (startX, startY, drawWidth, drawHeight, windowWidth, windowHeight) : Real32.real vector = + let + val startX = Real32.fromInt startX + val startY = Real32.fromInt startY + val startY = windowHeight - (startY + drawHeight) + val endX = startX + drawWidth + val endY = startY + drawHeight + val windowHeight = windowHeight / 2.0 + val windowWidth = windowWidth / 2.0 + in + #[ (((startX * (1.0 - 0.47499999404)) + (endX * 0.47499999404)) / windowWidth) - 1.0, + (((startY * (1.0 - 0.700000047684)) + (endY * 0.700000047684)) / windowHeight) - 1.0, + (((startX * (1.0 - 0.299999982119)) + (endX * 0.299999982119)) / windowWidth) - 1.0, + (((startY * (1.0 - 0.675000011921)) + (endY * 0.675000011921)) / windowHeight) - 1.0, + (((startX * (1.0 - 0.449999988079)) + (endX * 0.449999988079)) / windowWidth) - 1.0, + (((startY * (1.0 - 0.550000011921)) + (endY * 0.550000011921)) / windowHeight) - 1.0, + (((startX * (1.0 - 0.625)) + (endX * 0.625)) / windowWidth) - 1.0, + (((startY * (1.0 - 0.275000035763)) + (endY * 0.275000035763)) / windowHeight) - 1.0, + (((startX * (1.0 - 0.799999952316)) + (endX * 0.799999952316)) / windowWidth) - 1.0, + (((startY * (1.0 - 0.400000035763)) + (endY * 0.400000035763)) / windowHeight) - 1.0, + (((startX * (1.0 - 0.524999976158)) + (endX * 0.524999976158)) / windowWidth) - 1.0, + (((startY * (1.0 - 0.524999976158)) + (endY * 0.524999976158)) / windowHeight) - 1.0 + ] + end +end \ No newline at end of file diff --git a/imperative-shell/file-thread.sml b/imperative-shell/file-thread.sml index ebf458f..b26a2c6 100644 --- a/imperative-shell/file-thread.sml +++ b/imperative-shell/file-thread.sml @@ -14,31 +14,33 @@ struct val filename = "a.dsc" val exportFilename = "a.sml" - datatype dir = X | Y - - fun ndcToLerp (num, dir) = + fun ndcToLerpX num = let val num = (num + 1.0) / 2.0 val num = Real32.toString num in - case dir of - X => - " ((startX * (1.0 - " ^ num ^ ")) + (endX * " ^ num ^ ")) / windowWidth" - | Y => - " ((startY * (1.0 - " ^ num ^ ")) + (endY * " ^ num ^ ")) / windowHeight" + " (((startX * (1.0 - " ^ num ^ ")) + (endX * " ^ num ^ ")) / windowWidth) - 1.0" + end + + fun ndcToLerpY num = + let + val num = (num + 1.0) / 2.0 + val num = Real32.toString num + in + " (((startY * (1.0 - " ^ num ^ ")) + (endY * " ^ num ^ ")) / windowHeight) - 1.0" end fun helpExportTriangles (io, triangles) = case triangles of {x1, y1, x2, y2, x3, y3} :: tl => let - val x1 = ndcToLerp (x1, X) - val x2 = ndcToLerp (x2, X) - val x3 = ndcToLerp (x3, X) + val x1 = ndcToLerpX x1 + val x2 = ndcToLerpX x2 + val x3 = ndcToLerpX x3 - val y1 = ndcToLerp (y1, Y) - val y2 = ndcToLerp (y2, Y) - val y3 = ndcToLerp (y3, Y) + val y1 = ndcToLerpY y1 + val y2 = ndcToLerpY y2 + val y3 = ndcToLerpY y3 val line = String.concat [ x1, ",\n", y1, ",\n" @@ -66,8 +68,11 @@ struct \ let\n\ \ val startX = Real32.fromInt startX\n\ \ val startY = Real32.fromInt startY\n\ + \ val startY = windowHeight - (startY + drawHeight)\n\ \ val endX = startX + drawWidth\n\ \ val endY = startY + drawHeight\n\ + \ val windowHeight = windowHeight / 2.0\n\ + \ val windowWidth = windowWidth / 2.0\n\ \ in\n\ \ #[" val _ = TextIO.output (io, functionStartString)