From: Taran Nathan Date: Thu, 21 May 2026 20:43:46 +0000 (-0700) Subject: first X-Git-Url: https://git.taranathan.com/?a=commitdiff_plain;h=2d7b02059d64ef99b332bd4cf73846049df378be;p=cart.git first --- 2d7b02059d64ef99b332bd4cf73846049df378be diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..95c172e --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,415 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "bytemuck" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" + +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + +[[package]] +name = "generator" +version = "0.1.0" +dependencies = [ + "anyhow", + "csv", + "nalgebra", + "serde", + "structs", +] + +[[package]] +name = "glam" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "333928d5eb103c5d4050533cec0384302db6be8ef7d3cebd30ec6a35350353da" + +[[package]] +name = "glam" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3abb554f8ee44336b72d522e0a7fe86a29e09f839a36022fa869a7dfe941a54b" + +[[package]] +name = "glam" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4126c0479ccf7e8664c36a2d719f5f2c140fbb4f9090008098d2c291fa5b3f16" + +[[package]] +name = "glam" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01732b97afd8508eee3333a541b9f7610f454bb818669e66e90f5f57c93a776" + +[[package]] +name = "glam" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525a3e490ba77b8e326fb67d4b44b4bd2f920f44d4cc73ccec50adc68e3bee34" + +[[package]] +name = "glam" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8509e6791516e81c1a630d0bd7fbac36d2fa8712a9da8662e716b52d5051ca" + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" + +[[package]] +name = "glam" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" + +[[package]] +name = "glam" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f597d56c1bd55a811a1be189459e8fad2bbc272616375602443bdfb37fa774" + +[[package]] +name = "glam" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e4afd9ad95555081e109fe1d21f2a30c691b5f0919c67dfa690a2e1eb6bd51c" + +[[package]] +name = "glam" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" + +[[package]] +name = "glam" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" + +[[package]] +name = "glam" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" + +[[package]] +name = "glam" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94" + +[[package]] +name = "glam" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" + +[[package]] +name = "glam" +version = "0.30.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9" + +[[package]] +name = "glam" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556f6b2ea90b8d15a74e0e7bb41671c9bdf38cd9f78c284d750b9ce58a2b5be7" + +[[package]] +name = "glam" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f70749695b063ecbf6b62949ccccde2e733ec3ecbbd71d467dca4e5c6c97cca0" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "matrixmultiply" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "nalgebra" +version = "0.34.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df76ea0ff5c7e6b88689085804d6132ded0ddb9de5ca5b8aeb9eeadc0508a70a" +dependencies = [ + "approx", + "glam 0.14.0", + "glam 0.15.2", + "glam 0.16.0", + "glam 0.17.3", + "glam 0.18.0", + "glam 0.19.0", + "glam 0.20.5", + "glam 0.21.3", + "glam 0.22.0", + "glam 0.23.0", + "glam 0.24.2", + "glam 0.25.0", + "glam 0.27.0", + "glam 0.28.0", + "glam 0.29.3", + "glam 0.30.10", + "glam 0.31.1", + "glam 0.32.1", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "973e7178a678cfd059ccec50887658d482ce16b0aa9da3888ddeab5cd5eb4889" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "simba" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "structs" +version = "0.0.0" +dependencies = [ + "csv", + "nalgebra", + "serde", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "typenum" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "wide" +version = "0.7.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +dependencies = [ + "bytemuck", + "safe_arch", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..e0fc46c --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[workspace] +members = [ + "generator", + "structs", +] +resolver = "3" diff --git a/generator/.gitignore b/generator/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/generator/.gitignore @@ -0,0 +1 @@ +/target diff --git a/generator/Cargo.lock b/generator/Cargo.lock new file mode 100644 index 0000000..3b81e0b --- /dev/null +++ b/generator/Cargo.lock @@ -0,0 +1,405 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "bytemuck" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" + +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + +[[package]] +name = "generator" +version = "0.1.0" +dependencies = [ + "anyhow", + "csv", + "nalgebra", + "serde", +] + +[[package]] +name = "glam" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "333928d5eb103c5d4050533cec0384302db6be8ef7d3cebd30ec6a35350353da" + +[[package]] +name = "glam" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3abb554f8ee44336b72d522e0a7fe86a29e09f839a36022fa869a7dfe941a54b" + +[[package]] +name = "glam" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4126c0479ccf7e8664c36a2d719f5f2c140fbb4f9090008098d2c291fa5b3f16" + +[[package]] +name = "glam" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01732b97afd8508eee3333a541b9f7610f454bb818669e66e90f5f57c93a776" + +[[package]] +name = "glam" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525a3e490ba77b8e326fb67d4b44b4bd2f920f44d4cc73ccec50adc68e3bee34" + +[[package]] +name = "glam" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8509e6791516e81c1a630d0bd7fbac36d2fa8712a9da8662e716b52d5051ca" + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" + +[[package]] +name = "glam" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" + +[[package]] +name = "glam" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f597d56c1bd55a811a1be189459e8fad2bbc272616375602443bdfb37fa774" + +[[package]] +name = "glam" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e4afd9ad95555081e109fe1d21f2a30c691b5f0919c67dfa690a2e1eb6bd51c" + +[[package]] +name = "glam" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" + +[[package]] +name = "glam" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" + +[[package]] +name = "glam" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" + +[[package]] +name = "glam" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94" + +[[package]] +name = "glam" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" + +[[package]] +name = "glam" +version = "0.30.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9" + +[[package]] +name = "glam" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556f6b2ea90b8d15a74e0e7bb41671c9bdf38cd9f78c284d750b9ce58a2b5be7" + +[[package]] +name = "glam" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f70749695b063ecbf6b62949ccccde2e733ec3ecbbd71d467dca4e5c6c97cca0" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "matrixmultiply" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "nalgebra" +version = "0.34.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df76ea0ff5c7e6b88689085804d6132ded0ddb9de5ca5b8aeb9eeadc0508a70a" +dependencies = [ + "approx", + "glam 0.14.0", + "glam 0.15.2", + "glam 0.16.0", + "glam 0.17.3", + "glam 0.18.0", + "glam 0.19.0", + "glam 0.20.5", + "glam 0.21.3", + "glam 0.22.0", + "glam 0.23.0", + "glam 0.24.2", + "glam 0.25.0", + "glam 0.27.0", + "glam 0.28.0", + "glam 0.29.3", + "glam 0.30.10", + "glam 0.31.1", + "glam 0.32.1", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "973e7178a678cfd059ccec50887658d482ce16b0aa9da3888ddeab5cd5eb4889" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "simba" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "typenum" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "wide" +version = "0.7.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +dependencies = [ + "bytemuck", + "safe_arch", +] diff --git a/generator/Cargo.toml b/generator/Cargo.toml new file mode 100644 index 0000000..2e4b465 --- /dev/null +++ b/generator/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "generator" +version = "0.1.0" +edition = "2024" + +[dependencies] +anyhow = "1.0.102" +csv = "1.4.0" +nalgebra = "0.34.2" +serde = { version = "1.0.228", features = ["derive"] } +structs = { path = "../structs" } diff --git a/generator/points.csv b/generator/points.csv new file mode 100644 index 0000000..f8a97cf --- /dev/null +++ b/generator/points.csv @@ -0,0 +1,53 @@ +2.0,0.0 +2.0,0.03491012985643517 +1.9999999999999998,0.06984153898349545 +1.9999999999999998,0.1048155585660824 +2.0,0.13985362388702086 +2.0,0.174977327051848 +2.0,0.21020847053135291 +2.0,0.24556912180580917 +2.0,0.28108166940478285 +2.0,0.31676888064907255 +2.0,0.35265396141692995 +2.0,0.38876061827543695 +2.0,0.4251131233400442 +2.0,0.4617363822511263 +2.0,0.4986560056863614 +1.9999999999999998,0.5358983848622453 +2.0,0.5734907715176157 +1.9999999999999998,0.6114613629173209 +1.9999999999999998,0.6498393924658126 +2.0,0.6886552265793305 +2.0,0.7279404685324046 +2.0,0.7677280700708315 +1.9999999999999998,0.8080524516703135 +1.9999999999999998,0.8489496324192094 +2.0,0.8904573706170724 +1.9999999999999998,0.9326153163099972 +1.9999999999999998,0.9754651771317226 +2.0,-0.975465177131724 +2.0,-0.9326153163099967 +2.0,-0.8904573706170721 +2.0,-0.8489496324192098 +2.0,-0.8080524516703143 +1.9999999999999998,-0.7677280700708329 +2.0,-0.7279404685324044 +2.0,-0.6886552265793305 +1.9999999999999998,-0.649839392465813 +2.0,-0.6114613629173217 +2.0,-0.5734907715176153 +1.9999999999999998,-0.5358983848622452 +2.0,-0.49865600568636176 +2.0,-0.46173638225112695 +1.9999999999999998,-0.42511312334004536 +2.0,-0.3887606182754367 +2.0,-0.35265396141693006 +2.0,-0.31676888064907316 +1.9999999999999998,-0.2810816694047838 +2.0,-0.24556912180580867 +2.0,-0.2102084705313528 +2.0,-0.1749773270518483 +2.0,-0.13985362388702152 +1.9999999999999998,-0.10481555856608347 +1.9999999999999998,-0.06984153898349515 +2.0,-0.03491012985643527 diff --git a/generator/records.csv b/generator/records.csv new file mode 100644 index 0000000..ad6f1df --- /dev/null +++ b/generator/records.csv @@ -0,0 +1,53 @@ +0.0,0.0,0.0,2.0 +0.0,0.0,0.017453292519943295,2.0003046560878155 +0.0,0.0,0.03490658503988659,2.0012190885976433 +0.0,0.0,0.05235987755982989,2.002744691995842 +0.0,0.0,0.06981317007977318,2.0048837961623445 +0.0,0.0,0.08726646259971647,2.0076396750866947 +0.0,0.0,0.10471975511965978,2.011016559127033 +0.0,0.0,0.12217304763960307,2.0150196509176967 +0.0,0.0,0.13962634015954636,2.019655145037236 +0.0,0.0,0.15707963267948966,2.0249302515760057 +0.0,0.0,0.17453292519943295,2.0308532237714902 +0.0,0.0,0.19198621771937624,2.0374333899104284 +0.0,0.0,0.20943951023931953,2.0446811897300585 +0.0,0.0,0.22689280275926285,2.0526082155867833 +0.0,0.0,0.24434609527920614,2.0612272586997964 +0.0,0.0,0.2617993877991494,2.070552360820166 +0.0,0.0,0.2792526803190927,2.080598871723204 +0.0,0.0,0.2967059728390361,2.091383512974296 +0.0,0.0,0.3141592653589793,2.1029244484765344 +0.0,0.0,0.33161255787892263,2.1152413623733413 +0.0,0.0,0.3490658503988659,2.128355544951824 +0.0,0.0,0.3665191429188092,2.142289987274058 +0.0,0.0,0.3839724354387525,2.1570694853551666 +0.0,0.0,0.4014257279586958,2.1727207548105922 +0.0,0.0,0.4188790204786391,2.1892725570120937 +0.0,0.0,0.4363323129985824,2.2067558379249834 +0.0,0.0,0.45378560551852565,2.2252038809503776 +0.0,0.0,-0.4537856055185261,2.2252038809503785 +0.0,0.0,-0.43633231299858216,2.2067558379249834 +0.0,0.0,-0.418879020478639,2.1892725570120932 +0.0,0.0,-0.40142572795869597,2.1727207548105927 +0.0,0.0,-0.3839724354387528,2.157069485355167 +0.0,0.0,-0.36651914291880977,2.1422899872740584 +0.0,0.0,-0.3490658503988658,2.128355544951824 +0.0,0.0,-0.33161255787892263,2.1152413623733413 +0.0,0.0,-0.31415926535897953,2.1029244484765344 +0.0,0.0,-0.2967059728390365,2.0913835129742964 +0.0,0.0,-0.2792526803190925,2.080598871723204 +0.0,0.0,-0.26179938779914935,2.070552360820166 +0.0,0.0,-0.24434609527920628,2.0612272586997964 +0.0,0.0,-0.22689280275926318,2.0526082155867833 +0.0,0.0,-0.2094395102393201,2.0446811897300585 +0.0,0.0,-0.1919862177193761,2.0374333899104284 +0.0,0.0,-0.174532925199433,2.0308532237714902 +0.0,0.0,-0.1570796326794899,2.024930251576006 +0.0,0.0,-0.1396263401595468,2.019655145037236 +0.0,0.0,-0.12217304763960281,2.0150196509176967 +0.0,0.0,-0.10471975511965972,2.011016559127033 +0.0,0.0,-0.08726646259971663,2.0076396750866947 +0.0,0.0,-0.06981317007977351,2.0048837961623445 +0.0,0.0,-0.052359877559830424,2.002744691995842 +0.0,0.0,-0.034906585039886445,2.0012190885976433 +0.0,0.0,-0.017453292519943344,2.0003046560878155 diff --git a/generator/room.csv b/generator/room.csv new file mode 100644 index 0000000..cfa62a8 --- /dev/null +++ b/generator/room.csv @@ -0,0 +1,3 @@ +x1,y1,x2,y2 +2,1,2,-1 + diff --git a/generator/src/main.rs b/generator/src/main.rs new file mode 100644 index 0000000..4ea5c0c --- /dev/null +++ b/generator/src/main.rs @@ -0,0 +1,114 @@ +use anyhow::{Result, bail}; +use csv::{Reader, ReaderBuilder, Trim, Writer, WriterBuilder}; +use nalgebra::{Point2, Rotation2, Vector2}; +use serde::{Deserialize, Serialize}; +use structs::*; + +fn main() -> Result<()> { + let mut reader = ReaderBuilder::new() + .has_headers(true) + .trim(Trim::All) + .from_path("./room.csv")?; + + let lines: std::result::Result, csv::Error> = reader.deserialize::().collect(); + + let lines: Vec = lines?; + dbg!(&lines); + let mut poses: Vec = vec![]; + + let mut records: Vec = vec![]; + + for deg in 0..360 { + poses.push(Cart { + cart_pos: Point2::new(0.0, 0.0), + cart_rot: Rotation2::new((deg as f64).to_radians()), + }); + } + + let mut point_writer = WriterBuilder::new() + .has_headers(true) + .from_path("./points.csv")?; + + for pose in poses { + if let Some(distance) = raycast( + &lines, + (pose.cart_pos.x, pose.cart_pos.y), + pose.cart_rot.angle(), + ) { + records.push(cart_to_record(&pose, distance)); + point_writer.serialize(record_to_point(&pose, distance))?; + } + } + + let mut writer = WriterBuilder::new() + .has_headers(false) + .from_path("./records.csv")?; + for record in records { + writer.serialize(&record)?; + } + + Ok(()) +} + +fn record_to_point(cart: &Cart, distance: f64) -> (f64, f64) { + let ray = Vector2::new( + cart.cart_rot.angle().cos() * distance, + cart.cart_rot.angle().sin() * distance, + ); + + let transformed = cart.cart_pos + ray; + + (transformed.x, transformed.y) +} + +fn cart_to_record(cart: &Cart, distance: f64) -> Record { + Record { + cart_pos: (cart.cart_pos.x, cart.cart_pos.y), + cart_rot: cart.cart_rot.angle(), + distance: distance, + } +} + +/// returns distance +/// angle is radians +fn raycast(objects: &Vec, start_pos: (f64, f64), angle: f64) -> Option { + let ray_dir = (angle.cos(), angle.sin()); + + objects + .into_iter() + .filter_map(|line| intersect_ray_segment(start_pos, ray_dir, &line)) + .reduce(f64::min) +} + +fn intersect_ray_segment( + ray_origin: (f64, f64), + ray_dir: (f64, f64), + Line(seg_a, seg_b): &Line, +) -> Option { + let segment = (seg_b.0 - seg_a.0, seg_b.1 - seg_a.1); + + let diff = (seg_a.0 - ray_origin.0, seg_a.1 - ray_origin.1); + + let denom = cross(ray_dir, segment); + + // Parallel (or nearly parallel) + if denom.abs() < 1e-10 { + return None; + } + + let t = cross(diff, segment) / denom; + let u = cross(diff, ray_dir) / denom; + + // Ray: t >= 0 + // Segment: 0 <= u <= 1 + if t >= 0.0 && (0.0..=1.0).contains(&u) { + Some(t) // ray_dir is unit length → t is distance + } else { + None + } +} + +///cross product +fn cross(a: (f64, f64), b: (f64, f64)) -> f64 { + a.0 * b.1 - a.1 * b.0 +} diff --git a/structs/.gitignore b/structs/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/structs/.gitignore @@ -0,0 +1 @@ +/target diff --git a/structs/Cargo.toml b/structs/Cargo.toml new file mode 100644 index 0000000..fffcff3 --- /dev/null +++ b/structs/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "structs" +version = "0.0.0" +edition = "2024" + +[dependencies] +csv = "1.4.0" +nalgebra = "0.34.2" +serde = { version = "1.0.228", features = ["derive"] } diff --git a/structs/src/lib.rs b/structs/src/lib.rs new file mode 100644 index 0000000..2885a18 --- /dev/null +++ b/structs/src/lib.rs @@ -0,0 +1,30 @@ +use nalgebra::{Point2, Rotation2}; +use serde::{Deserialize, Serialize}; + +#[derive(Debug)] +pub struct Cart { + pub cart_pos: Point2, + pub cart_rot: Rotation2, +} + +#[derive(Debug, Serialize)] +pub struct Record { + pub cart_pos: (f64, f64), + ///radians + pub cart_rot: f64, + pub distance: f64, +} + +#[derive(Debug, Deserialize)] +pub struct Line(pub (f64, f64), pub (f64, f64)); + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = 4; + assert_eq!(result, 4); + } +}