progress with refactoring

This commit is contained in:
2025-07-06 03:21:18 +01:00
parent df5f326e36
commit ed64b464c8
2 changed files with 57 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
structure Ndc =
struct
(* ndc = normalised device coordinates *)
fun ltrbToVertex (left, top, right, bottom) =
#[ left, bottom
, right, bottom
@@ -20,4 +21,36 @@ struct
, right, bottom, r, g, b
, right, top, r, g, b
]
fun fromPixelX (xpos, windowWidth, windowHeight) =
let
val halfWidth = (Real32.fromInt windowWidth) / 2.0
val xpos = xpos - halfWidth
in
if windowWidth > windowHeight then
let
val difference = windowWidth - windowHeight
val offset = Real32.fromInt (difference div 2)
in
xpos / (halfWidth - offset)
end
else
xpos / halfWidth
end
fun fromPixelY (ypos, windowWidth, windowHeight) =
let
val halfHeight = (Real32.fromInt windowHeight) / 2.0
val ypos = ~(ypos - halfHeight)
in
if windowHeight > windowWidth then
let
val difference = windowHeight - windowWidth
val offset = Real32.fromInt (difference div 2)
in
ypos / (halfHeight - offset)
end
else
ypos / halfHeight
end
end

View File

@@ -225,7 +225,14 @@ struct
foldWithDuplicates (f, br, acc)
end
fun insertItemIntoTree (item, acc) =
fun insertItemIntoTree ignoreData (item, acc) =
if #data item = 0 then
(* ignore specific data by not inserting it into tree.
* May later functorise this quad tree,
* and allow different types of data
* to be ignored/stored in #data field. *)
acc
else
BinTree.insert (item, acc)
fun toList qtree =
@@ -234,4 +241,19 @@ struct
in
BinTree.toList (tree, [])
end
fun toTriangles (windowWidth, windowHeight, squares, acc) =
case squares of
{x, y, ex, ey, data = _} :: tl =>
let
val startX = Ndc.fromPixelX (x, windowWidth, windowHeight)
val endX = Ndc.fromPixelX (ex, windowWidth, windowHeight)
val startY = Ndc.fromPixelY (y, windowWidth, windowHeight)
val endY = Ndc.fromPixelY (ey, windowWidth, windowHeight)
val acc = Ndc.ltrbToVertex (startX, startY, endX, endY) :: acc
in
toTriangles (windowWidth, windowHeight, tl, acc)
end
| [] => Vector.concat acc
end