@jetta/axle-load-calculator 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/ai_changelog/INDEX.md +13 -0
- package/.cursor/ai_changelog/_TEMPLATE.md +55 -0
- package/.cursor/rules/code-standards.mdc +103 -0
- package/.cursor/rules/knowledge-base.mdc +14 -0
- package/.cursor/rules/planning-standards.mdc +55 -0
- package/.cursor/skills/document-feature-knowledge/SKILL.md +51 -0
- package/README.md +49 -0
- package/bitbucket-pipelines.yml +81 -0
- package/build/core/contracts/chassi_reference.d.ts +7 -0
- package/build/core/contracts/chassi_reference.d.ts.map +1 -0
- package/build/core/contracts/chassi_reference.js +5 -0
- package/build/core/contracts/ms_faixas_contract.d.ts +13 -0
- package/build/core/contracts/ms_faixas_contract.d.ts.map +1 -0
- package/build/core/contracts/ms_faixas_contract.js +89 -0
- package/build/core/contracts/rotation_enum.d.ts +11 -0
- package/build/core/contracts/rotation_enum.d.ts.map +1 -0
- package/build/core/contracts/rotation_enum.js +9 -0
- package/build/core/contracts/suspension_type.d.ts +5 -0
- package/build/core/contracts/suspension_type.d.ts.map +1 -0
- package/build/core/contracts/suspension_type.js +4 -0
- package/build/core/contracts/transport_record.d.ts +5 -0
- package/build/core/contracts/transport_record.d.ts.map +1 -0
- package/build/core/contracts/transport_record.js +1 -0
- package/build/core/contracts/vehicle_type.d.ts +12 -0
- package/build/core/contracts/vehicle_type.d.ts.map +1 -0
- package/build/core/contracts/vehicle_type.js +10 -0
- package/build/core/contracts/vehicle_version.d.ts +8 -0
- package/build/core/contracts/vehicle_version.d.ts.map +1 -0
- package/build/core/contracts/vehicle_version.js +7 -0
- package/build/core/contracts/wire_flags.d.ts +27 -0
- package/build/core/contracts/wire_flags.d.ts.map +1 -0
- package/build/core/contracts/wire_flags.js +26 -0
- package/build/core/math/float_tools.d.ts +7 -0
- package/build/core/math/float_tools.d.ts.map +1 -0
- package/build/core/math/float_tools.js +14 -0
- package/build/core/math/gaussian_elimination.d.ts +8 -0
- package/build/core/math/gaussian_elimination.d.ts.map +1 -0
- package/build/core/math/gaussian_elimination.js +85 -0
- package/build/core/orchestration/axle_weight_physics.d.ts +7 -0
- package/build/core/orchestration/axle_weight_physics.d.ts.map +1 -0
- package/build/core/orchestration/axle_weight_physics.js +27 -0
- package/build/core/orchestration/collision_checker.d.ts +6 -0
- package/build/core/orchestration/collision_checker.d.ts.map +1 -0
- package/build/core/orchestration/collision_checker.js +67 -0
- package/build/core/orchestration/connector_payload_builder.d.ts +11 -0
- package/build/core/orchestration/connector_payload_builder.d.ts.map +1 -0
- package/build/core/orchestration/connector_payload_builder.js +67 -0
- package/build/core/orchestration/java_mass_center.d.ts +9 -0
- package/build/core/orchestration/java_mass_center.d.ts.map +1 -0
- package/build/core/orchestration/java_mass_center.js +79 -0
- package/build/core/orchestration/output_builder.d.ts +11 -0
- package/build/core/orchestration/output_builder.d.ts.map +1 -0
- package/build/core/orchestration/output_builder.js +15 -0
- package/build/core/orchestration/request_schema.d.ts +65 -0
- package/build/core/orchestration/request_schema.d.ts.map +1 -0
- package/build/core/orchestration/request_schema.js +20 -0
- package/build/core/orchestration/weight_by_axis_task.d.ts +7 -0
- package/build/core/orchestration/weight_by_axis_task.d.ts.map +1 -0
- package/build/core/orchestration/weight_by_axis_task.js +105 -0
- package/build/core/physics/items/allocated_item.d.ts +22 -0
- package/build/core/physics/items/allocated_item.d.ts.map +1 -0
- package/build/core/physics/items/allocated_item.js +29 -0
- package/build/core/physics/items/allocated_item_manager.d.ts +31 -0
- package/build/core/physics/items/allocated_item_manager.d.ts.map +1 -0
- package/build/core/physics/items/allocated_item_manager.js +38 -0
- package/build/core/physics/items/center_of_mass.d.ts +14 -0
- package/build/core/physics/items/center_of_mass.d.ts.map +1 -0
- package/build/core/physics/items/center_of_mass.js +24 -0
- package/build/core/physics/items/compute_grouper_center_of_mass.d.ts +19 -0
- package/build/core/physics/items/compute_grouper_center_of_mass.d.ts.map +1 -0
- package/build/core/physics/items/compute_grouper_center_of_mass.js +28 -0
- package/build/core/physics/items/item_templates.d.ts +32 -0
- package/build/core/physics/items/item_templates.d.ts.map +1 -0
- package/build/core/physics/items/item_templates.js +53 -0
- package/build/core/physics/items/multi_container_allocated_items.d.ts +37 -0
- package/build/core/physics/items/multi_container_allocated_items.d.ts.map +1 -0
- package/build/core/physics/items/multi_container_allocated_items.js +91 -0
- package/build/core/physics/items/rotation_transforms.d.ts +8 -0
- package/build/core/physics/items/rotation_transforms.d.ts.map +1 -0
- package/build/core/physics/items/rotation_transforms.js +21 -0
- package/build/core/physics/models/axle_weight_model.d.ts +32 -0
- package/build/core/physics/models/axle_weight_model.d.ts.map +1 -0
- package/build/core/physics/models/axle_weight_model.js +72 -0
- package/build/core/physics/models/bi_truck_model.d.ts +21 -0
- package/build/core/physics/models/bi_truck_model.d.ts.map +1 -0
- package/build/core/physics/models/bi_truck_model.js +60 -0
- package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.d.ts +21 -0
- package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.d.ts.map +1 -0
- package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.js +69 -0
- package/build/core/physics/models/bitrem_model.d.ts +33 -0
- package/build/core/physics/models/bitrem_model.d.ts.map +1 -0
- package/build/core/physics/models/bitrem_model.js +123 -0
- package/build/core/physics/models/chassi_forces.d.ts +30 -0
- package/build/core/physics/models/chassi_forces.d.ts.map +1 -0
- package/build/core/physics/models/chassi_forces.js +39 -0
- package/build/core/physics/models/deflection/beam_deflection.d.ts +28 -0
- package/build/core/physics/models/deflection/beam_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/beam_deflection.js +78 -0
- package/build/core/physics/models/deflection/bitrem_deflection.d.ts +22 -0
- package/build/core/physics/models/deflection/bitrem_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/bitrem_deflection.js +54 -0
- package/build/core/physics/models/deflection/create_deflection_delegate.d.ts +12 -0
- package/build/core/physics/models/deflection/create_deflection_delegate.d.ts.map +1 -0
- package/build/core/physics/models/deflection/create_deflection_delegate.js +32 -0
- package/build/core/physics/models/deflection/deflection_model.d.ts +19 -0
- package/build/core/physics/models/deflection/deflection_model.d.ts.map +1 -0
- package/build/core/physics/models/deflection/deflection_model.js +23 -0
- package/build/core/physics/models/deflection/deflection_support_manager.d.ts +21 -0
- package/build/core/physics/models/deflection/deflection_support_manager.d.ts.map +1 -0
- package/build/core/physics/models/deflection/deflection_support_manager.js +40 -0
- package/build/core/physics/models/deflection/deflection_tools.d.ts +6 -0
- package/build/core/physics/models/deflection/deflection_tools.d.ts.map +1 -0
- package/build/core/physics/models/deflection/deflection_tools.js +10 -0
- package/build/core/physics/models/deflection/integration_constant_calculator.d.ts +22 -0
- package/build/core/physics/models/deflection/integration_constant_calculator.d.ts.map +1 -0
- package/build/core/physics/models/deflection/integration_constant_calculator.js +48 -0
- package/build/core/physics/models/deflection/rodotrem_deflection.d.ts +22 -0
- package/build/core/physics/models/deflection/rodotrem_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/rodotrem_deflection.js +47 -0
- package/build/core/physics/models/deflection/semi_reboque_deflection.d.ts +21 -0
- package/build/core/physics/models/deflection/semi_reboque_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/semi_reboque_deflection.js +31 -0
- package/build/core/physics/models/deflection/simple_truck_deflection.d.ts +20 -0
- package/build/core/physics/models/deflection/simple_truck_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/simple_truck_deflection.js +28 -0
- package/build/core/physics/models/deflection/vanderleia_deflection.d.ts +21 -0
- package/build/core/physics/models/deflection/vanderleia_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/vanderleia_deflection.js +41 -0
- package/build/core/physics/models/old_tare_model.d.ts +17 -0
- package/build/core/physics/models/old_tare_model.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_model.js +40 -0
- package/build/core/physics/models/old_tare_scale.d.ts +7 -0
- package/build/core/physics/models/old_tare_scale.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_scale.js +8 -0
- package/build/core/physics/models/old_tare_semireboque.d.ts +7 -0
- package/build/core/physics/models/old_tare_semireboque.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_semireboque.js +37 -0
- package/build/core/physics/models/old_tare_truck.d.ts +7 -0
- package/build/core/physics/models/old_tare_truck.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_truck.js +12 -0
- package/build/core/physics/models/old_tare_vanderleia.d.ts +7 -0
- package/build/core/physics/models/old_tare_vanderleia.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_vanderleia.js +31 -0
- package/build/core/physics/models/percentage_on_axles_calculator.d.ts +19 -0
- package/build/core/physics/models/percentage_on_axles_calculator.d.ts.map +1 -0
- package/build/core/physics/models/percentage_on_axles_calculator.js +39 -0
- package/build/core/physics/models/quad_semi_trailer_model.d.ts +21 -0
- package/build/core/physics/models/quad_semi_trailer_model.d.ts.map +1 -0
- package/build/core/physics/models/quad_semi_trailer_model.js +70 -0
- package/build/core/physics/models/rodotrem_model.d.ts +33 -0
- package/build/core/physics/models/rodotrem_model.d.ts.map +1 -0
- package/build/core/physics/models/rodotrem_model.js +101 -0
- package/build/core/physics/models/semi_reboque_base.d.ts +34 -0
- package/build/core/physics/models/semi_reboque_base.d.ts.map +1 -0
- package/build/core/physics/models/semi_reboque_base.js +85 -0
- package/build/core/physics/models/semi_reboque_model.d.ts +41 -0
- package/build/core/physics/models/semi_reboque_model.d.ts.map +1 -0
- package/build/core/physics/models/semi_reboque_model.js +84 -0
- package/build/core/physics/models/simple_truck_base.d.ts +29 -0
- package/build/core/physics/models/simple_truck_base.d.ts.map +1 -0
- package/build/core/physics/models/simple_truck_base.js +57 -0
- package/build/core/physics/models/simple_truck_model.d.ts +41 -0
- package/build/core/physics/models/simple_truck_model.d.ts.map +1 -0
- package/build/core/physics/models/simple_truck_model.js +76 -0
- package/build/core/physics/models/single_container_tare.d.ts +18 -0
- package/build/core/physics/models/single_container_tare.d.ts.map +1 -0
- package/build/core/physics/models/single_container_tare.js +45 -0
- package/build/core/physics/models/tare_model.d.ts +12 -0
- package/build/core/physics/models/tare_model.d.ts.map +1 -0
- package/build/core/physics/models/tare_model.js +36 -0
- package/build/core/physics/models/vanderleia_model.d.ts +33 -0
- package/build/core/physics/models/vanderleia_model.d.ts.map +1 -0
- package/build/core/physics/models/vanderleia_model.js +100 -0
- package/build/core/physics/services/axle_weight_output_builder.d.ts +27 -0
- package/build/core/physics/services/axle_weight_output_builder.d.ts.map +1 -0
- package/build/core/physics/services/axle_weight_output_builder.js +42 -0
- package/build/core/physics/services/axle_weight_service.d.ts +20 -0
- package/build/core/physics/services/axle_weight_service.d.ts.map +1 -0
- package/build/core/physics/services/axle_weight_service.js +91 -0
- package/build/core/physics/services/cm_axle_weight_service.d.ts +12 -0
- package/build/core/physics/services/cm_axle_weight_service.d.ts.map +1 -0
- package/build/core/physics/services/cm_axle_weight_service.js +33 -0
- package/build/core/physics/services/container_corner_forces.d.ts +33 -0
- package/build/core/physics/services/container_corner_forces.d.ts.map +1 -0
- package/build/core/physics/services/container_corner_forces.js +84 -0
- package/build/core/physics/transports/axle_manager.d.ts +22 -0
- package/build/core/physics/transports/axle_manager.d.ts.map +1 -0
- package/build/core/physics/transports/axle_manager.js +34 -0
- package/build/core/physics/transports/axle_record.d.ts +21 -0
- package/build/core/physics/transports/axle_record.d.ts.map +1 -0
- package/build/core/physics/transports/axle_record.js +57 -0
- package/build/core/physics/transports/chassi.d.ts +52 -0
- package/build/core/physics/transports/chassi.d.ts.map +1 -0
- package/build/core/physics/transports/chassi.js +105 -0
- package/build/core/physics/transports/container_record.d.ts +25 -0
- package/build/core/physics/transports/container_record.d.ts.map +1 -0
- package/build/core/physics/transports/container_record.js +49 -0
- package/build/core/physics/transports/containerweight/container_max_weight_calculator.d.ts +27 -0
- package/build/core/physics/transports/containerweight/container_max_weight_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/container_max_weight_calculator.js +40 -0
- package/build/core/physics/transports/containerweight/container_tare_calculator.d.ts +28 -0
- package/build/core/physics/transports/containerweight/container_tare_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/container_tare_calculator.js +55 -0
- package/build/core/physics/transports/containerweight/container_weight_model.d.ts +15 -0
- package/build/core/physics/transports/containerweight/container_weight_model.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/container_weight_model.js +31 -0
- package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.d.ts +17 -0
- package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.js +31 -0
- package/build/core/physics/transports/containerweight/single_container_weight_calculator.d.ts +20 -0
- package/build/core/physics/transports/containerweight/single_container_weight_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/single_container_weight_calculator.js +48 -0
- package/build/core/physics/transports/grouped_containers.d.ts +34 -0
- package/build/core/physics/transports/grouped_containers.d.ts.map +1 -0
- package/build/core/physics/transports/grouped_containers.js +68 -0
- package/build/core/physics/transports/merged_containers.d.ts +26 -0
- package/build/core/physics/transports/merged_containers.d.ts.map +1 -0
- package/build/core/physics/transports/merged_containers.js +45 -0
- package/build/core/physics/transports/tare/bitrem_axle_splitter.d.ts +26 -0
- package/build/core/physics/transports/tare/bitrem_axle_splitter.d.ts.map +1 -0
- package/build/core/physics/transports/tare/bitrem_axle_splitter.js +84 -0
- package/build/core/physics/transports/tare/bitrem_axle_weight_split.d.ts +22 -0
- package/build/core/physics/transports/tare/bitrem_axle_weight_split.d.ts.map +1 -0
- package/build/core/physics/transports/tare/bitrem_axle_weight_split.js +32 -0
- package/build/core/physics/transports/transport.d.ts +33 -0
- package/build/core/physics/transports/transport.d.ts.map +1 -0
- package/build/core/physics/transports/transport.js +110 -0
- package/build/index.d.ts +8 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +10 -0
- package/eslint.config.js +51 -0
- package/package.json +38 -0
- package/src/core/contracts/chassi_reference.ts +7 -0
- package/src/core/contracts/ms_faixas_contract.ts +114 -0
- package/src/core/contracts/rotation_enum.ts +11 -0
- package/src/core/contracts/suspension_type.ts +4 -0
- package/src/core/contracts/transport_record.ts +4 -0
- package/src/core/contracts/vehicle_type.ts +12 -0
- package/src/core/contracts/vehicle_version.ts +7 -0
- package/src/core/contracts/wire_flags.ts +26 -0
- package/src/core/math/float_tools.ts +17 -0
- package/src/core/math/gaussian_elimination.ts +104 -0
- package/src/core/orchestration/axle_weight_physics.ts +37 -0
- package/src/core/orchestration/collision_checker.ts +86 -0
- package/src/core/orchestration/connector_payload_builder.ts +81 -0
- package/src/core/orchestration/java_mass_center.ts +98 -0
- package/src/core/orchestration/output_builder.ts +18 -0
- package/src/core/orchestration/request_schema.ts +26 -0
- package/src/core/orchestration/weight_by_axis_task.ts +140 -0
- package/src/core/physics/items/allocated_item.ts +41 -0
- package/src/core/physics/items/allocated_item_manager.ts +50 -0
- package/src/core/physics/items/center_of_mass.ts +31 -0
- package/src/core/physics/items/compute_grouper_center_of_mass.ts +44 -0
- package/src/core/physics/items/item_templates.ts +65 -0
- package/src/core/physics/items/multi_container_allocated_items.ts +120 -0
- package/src/core/physics/items/rotation_transforms.ts +29 -0
- package/src/core/physics/models/axle_weight_model.ts +109 -0
- package/src/core/physics/models/bi_truck_model.ts +74 -0
- package/src/core/physics/models/bi_truck_tractor_semi_trailer_model.ts +86 -0
- package/src/core/physics/models/bitrem_model.ts +148 -0
- package/src/core/physics/models/chassi_forces.ts +50 -0
- package/src/core/physics/models/deflection/beam_deflection.ts +105 -0
- package/src/core/physics/models/deflection/bitrem_deflection.ts +68 -0
- package/src/core/physics/models/deflection/create_deflection_delegate.ts +46 -0
- package/src/core/physics/models/deflection/deflection_model.ts +33 -0
- package/src/core/physics/models/deflection/deflection_support_manager.ts +56 -0
- package/src/core/physics/models/deflection/deflection_tools.ts +11 -0
- package/src/core/physics/models/deflection/integration_constant_calculator.ts +62 -0
- package/src/core/physics/models/deflection/rodotrem_deflection.ts +57 -0
- package/src/core/physics/models/deflection/semi_reboque_deflection.ts +40 -0
- package/src/core/physics/models/deflection/simple_truck_deflection.ts +35 -0
- package/src/core/physics/models/deflection/vanderleia_deflection.ts +48 -0
- package/src/core/physics/models/old_tare_model.ts +51 -0
- package/src/core/physics/models/old_tare_scale.ts +9 -0
- package/src/core/physics/models/old_tare_semireboque.ts +51 -0
- package/src/core/physics/models/old_tare_truck.ts +15 -0
- package/src/core/physics/models/old_tare_vanderleia.ts +44 -0
- package/src/core/physics/models/percentage_on_axles_calculator.ts +49 -0
- package/src/core/physics/models/quad_semi_trailer_model.ts +87 -0
- package/src/core/physics/models/rodotrem_model.ts +131 -0
- package/src/core/physics/models/semi_reboque_base.ts +103 -0
- package/src/core/physics/models/semi_reboque_model.ts +127 -0
- package/src/core/physics/models/simple_truck_base.ts +70 -0
- package/src/core/physics/models/simple_truck_model.ts +115 -0
- package/src/core/physics/models/single_container_tare.ts +56 -0
- package/src/core/physics/models/tare_model.ts +46 -0
- package/src/core/physics/models/vanderleia_model.ts +125 -0
- package/src/core/physics/services/axle_weight_output_builder.ts +63 -0
- package/src/core/physics/services/axle_weight_service.ts +116 -0
- package/src/core/physics/services/cm_axle_weight_service.ts +45 -0
- package/src/core/physics/services/container_corner_forces.ts +95 -0
- package/src/core/physics/transports/axle_manager.ts +45 -0
- package/src/core/physics/transports/axle_record.ts +68 -0
- package/src/core/physics/transports/chassi.ts +130 -0
- package/src/core/physics/transports/container_record.ts +58 -0
- package/src/core/physics/transports/containerweight/container_max_weight_calculator.ts +59 -0
- package/src/core/physics/transports/containerweight/container_tare_calculator.ts +76 -0
- package/src/core/physics/transports/containerweight/container_weight_model.ts +38 -0
- package/src/core/physics/transports/containerweight/merged_containers_weight_calculator.ts +39 -0
- package/src/core/physics/transports/containerweight/single_container_weight_calculator.ts +65 -0
- package/src/core/physics/transports/grouped_containers.ts +91 -0
- package/src/core/physics/transports/merged_containers.ts +62 -0
- package/src/core/physics/transports/tare/bitrem_axle_splitter.ts +107 -0
- package/src/core/physics/transports/tare/bitrem_axle_weight_split.ts +55 -0
- package/src/core/physics/transports/transport.ts +137 -0
- package/src/index.ts +12 -0
- package/src/service/.gitkeep +0 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_1_basic_truck_input.json +1759 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_2_vanderleia_input.json +1286 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_3_interlink_input.json +2226 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_4_quad_semi_trailer.json +639 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_5_custom_center_of_gravity.json +557 -0
- package/test/data/src/core/physics/axle_weight_calculations/case_2_bitruck.json +664 -0
- package/test/data/src/core/physics/axle_weight_calculations/case_4_quad_semi_trailer.json +674 -0
- package/test/data/src/core/physics/axle_weight_calculations/case_5_bi_truck_semi_trailer.json +674 -0
- package/test/data/src/core/physics/axle_weight_service/case_1_input_truck.json +1025 -0
- package/test/data/src/core/physics/axle_weight_service/case_1_output_truck.json +38 -0
- package/test/data/src/core/physics/axle_weight_service/case_2_vanderleia_input.json +1286 -0
- package/test/data/src/core/physics/axle_weight_service/case_2_vanderleia_output.json +65 -0
- package/test/data/src/core/physics/axle_weight_service/case_3_input_semireboque.json +24625 -0
- package/test/data/src/core/physics/axle_weight_service/case_3_output_semireboque.json +57 -0
- package/test/data/src/core/physics/axle_weight_service/case_4_input_bitrem.json +2226 -0
- package/test/data/src/core/physics/axle_weight_service/case_4_output_bitrem.json +96 -0
- package/test/data/src/core/physics/beam_deflection/case_10_rodotrem_offset.json +474 -0
- package/test/data/src/core/physics/beam_deflection/case_11_bitruck.json +664 -0
- package/test/data/src/core/physics/beam_deflection/case_12_quad_semi_trailer.json +792 -0
- package/test/data/src/core/physics/beam_deflection/case_13_bi_truck_semi_trailer.json +792 -0
- package/test/data/src/core/physics/beam_deflection/case_1_documentation.ipynb +316 -0
- package/test/data/src/core/physics/beam_deflection/case_1_semireboque.json +402 -0
- package/test/data/src/core/physics/beam_deflection/case_2_bitrem.json +434 -0
- package/test/data/src/core/physics/beam_deflection/case_3_rodotrem.json +474 -0
- package/test/data/src/core/physics/beam_deflection/case_4_vanderleia_pneumatica.json +425 -0
- package/test/data/src/core/physics/beam_deflection/case_5_vanderleia_mecanica.json +366 -0
- package/test/data/src/core/physics/beam_deflection/case_6_truck.json +279 -0
- package/test/data/src/core/physics/beam_deflection/case_7_semireboque_structural_offset.json +318 -0
- package/test/data/src/core/physics/beam_deflection/case_8_vanderleia_offset.json +425 -0
- package/test/data/src/core/physics/beam_deflection/case_9_bitrem_offset.json +434 -0
- package/test/data/src/core/physics/bitrem_axle_splitter/case_1_simple_bitrem.json +145 -0
- package/test/data/src/core/physics/bitrem_axle_splitter/case_2_lowered_bitrem.json +238 -0
- package/test/data/src/core/physics/bitrem_axle_splitter/case_3_lowered_positive_proportion.json +238 -0
- package/test/data/src/core/physics/c_m_axle_weight_service/case_1_interlink_trailer.json +94 -0
- package/test/data/src/core/physics/calculations/case_1_simple_truck.json +83 -0
- package/test/data/src/core/physics/calculations/case_2_lowered_bitrem.json +1051 -0
- package/test/data/src/core/physics/calculations/case_3_container_mercedes.json +50 -0
- package/test/data/src/core/physics/container_corner_forces/case_1.json +674 -0
- package/test/data/src/core/physics/container_weight/case_1_basictruck.json +223 -0
- package/test/data/src/core/physics/container_weight/case_2_roadtrain.json +277 -0
- package/test/data/src/core/physics/container_weight/case_3_semireboque_rebaixado.json +197 -0
- package/test/data/src/core/physics/container_weight/case_4_semireboque_neck_limit.json +197 -0
- package/test/data/src/core/physics/container_weight/case_5_vanderleia_rebaixada.json +211 -0
- package/test/data/src/core/physics/container_weight/case_6_lowered_interlink.json +230 -0
- package/test/data/src/core/physics/python_goldens.json +9 -0
- package/test/data/src/core/physics/tare/case_1_simple_vanderleia.json +185 -0
- package/test/data/src/core/physics/tare/case_2_lowered_vanderleia.json +646 -0
- package/test/data/src/core/physics/tare/case_3_lowered_interlink.json +230 -0
- package/test/data/src/core/physics/tare/case_4_negative_tare_VUC.json +483 -0
- package/test/data/src/core/physics/tare/case_5_truck_bitruck.json +664 -0
- package/test/data/src/core/physics/tare/case_6_quad_semi_trailer.json +203 -0
- package/test/data/src/core/physics/tare/case_7_bi_truck_semi_trailer.json +203 -0
- package/test/data/src/core/physics/tare/case_8_triaxle_semi_trailer.json +203 -0
- package/test/data/src/core/physics/time_performance/case_1_center_of_mass.json +2916 -0
- package/test/data/src/core/physics/trucks/bitrem.json +150 -0
- package/test/data/src/core/physics/trucks/lowered_bitrem.json +1216 -0
- package/test/data/src/core/physics/trucks/lowered_bitrem_empty_first_container.json +1182 -0
- package/test/data/src/core/physics/trucks/rodotrem.json +148 -0
- package/test/data/src/core/physics/trucks/semi_reboque.json +91 -0
- package/test/data/src/core/physics/trucks/semi_reboque_rebaixado.json +1629 -0
- package/test/data/src/core/physics/trucks/simple_truck.json +85 -0
- package/test/data/src/core/physics/trucks/vanderleia_mechanical.json +105 -0
- package/test/data/src/core/physics/trucks/vanderleia_pneumatic.json +105 -0
- package/test/src/core/orchestration/request_schema.test.ts +20 -0
- package/test/src/core/orchestration/weight_by_axis_task.test.ts +87 -0
- package/test/src/core/physics/items/center_of_mass.test.ts +38 -0
- package/test/src/core/physics/items/multi_container_allocated_items.test.ts +22 -0
- package/test/src/core/physics/math_input_helpers.ts +64 -0
- package/test/src/core/physics/models/bitrem_model.test.ts +54 -0
- package/test/src/core/physics/models/deflection/deflection_model.test.ts +78 -0
- package/test/src/core/physics/models/rodotrem_model.test.ts +29 -0
- package/test/src/core/physics/models/semi_reboque_model.test.ts +72 -0
- package/test/src/core/physics/models/simple_truck_model.test.ts +23 -0
- package/test/src/core/physics/models/tare_model.test.ts +34 -0
- package/test/src/core/physics/models/vanderleia_model.test.ts +36 -0
- package/test/src/core/physics/services/axle_weight_service.test.ts +56 -0
- package/test/src/core/physics/services/cm_axle_weight_service.test.ts +23 -0
- package/test/src/core/physics/services/container_corner_forces.test.ts +23 -0
- package/test/src/core/physics/test_helpers.ts +13 -0
- package/test/src/core/physics/transports/chassi.test.ts +35 -0
- package/test/src/core/physics/transports/containerweight/container_weight_model.test.ts +57 -0
- package/test/src/core/physics/transports/tare/bitrem_axle_splitter.test.ts +30 -0
- package/test/src/index.test.ts +35 -0
- package/tsconfig.eslint.json +15 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"old_tare_scale.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/old_tare_scale.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAGxE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Transport } from '../transports/transport.js';
|
|
2
|
+
/**
|
|
3
|
+
* @param transport - Parsed transport.
|
|
4
|
+
* @returns Semireboque tare per axle.
|
|
5
|
+
*/
|
|
6
|
+
export declare function semireboque_tare(transport: Transport): number[];
|
|
7
|
+
//# sourceMappingURL=old_tare_semireboque.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"old_tare_semireboque.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/old_tare_semireboque.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAK3D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,CAa/D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { VEHICLE_VERSION } from '../../contracts/vehicle_version.js';
|
|
2
|
+
import { scale_tare } from './old_tare_scale.js';
|
|
3
|
+
const TRUNCATED_LIMIT = 13000;
|
|
4
|
+
/**
|
|
5
|
+
* @param transport - Parsed transport.
|
|
6
|
+
* @returns Semireboque tare per axle.
|
|
7
|
+
*/
|
|
8
|
+
export function semireboque_tare(transport) {
|
|
9
|
+
const version = transport.vehicle_version;
|
|
10
|
+
if (version === VEHICLE_VERSION.SEMIREBOQUE_QUAD
|
|
11
|
+
|| version === VEHICLE_VERSION.SEMIREBOQUE_QUAD_ALT) {
|
|
12
|
+
return scale_tare(transport.tare, [0.27509640559, 0.29967158355, 0.11978366503, 0.30544834583]);
|
|
13
|
+
}
|
|
14
|
+
if (version === VEHICLE_VERSION.SEMIREBOQUE_BITRUCK) {
|
|
15
|
+
return scale_tare(transport.tare, [0.17852139406, 0.17852139406, 0.43218944824, 0.21076776365]);
|
|
16
|
+
}
|
|
17
|
+
return semireboque_standard_tare(transport);
|
|
18
|
+
}
|
|
19
|
+
function semireboque_standard_tare(transport) {
|
|
20
|
+
const axle_1_max = transport.axle_manager.get_axle(1).max_supported_weight;
|
|
21
|
+
if (axle_1_max > TRUNCATED_LIMIT) {
|
|
22
|
+
return semireboque_heavy_axle_tare(transport.tare);
|
|
23
|
+
}
|
|
24
|
+
if (transport.tare < 18500) {
|
|
25
|
+
return scale_tare(transport.tare, [0.312, 0.2, 0.488]);
|
|
26
|
+
}
|
|
27
|
+
return scale_tare(transport.tare, [0.26, 0.35, 0.39]);
|
|
28
|
+
}
|
|
29
|
+
function semireboque_heavy_axle_tare(tare) {
|
|
30
|
+
if (tare > 19000) {
|
|
31
|
+
return scale_tare(tare, [0.24, 0.35, 0.41]);
|
|
32
|
+
}
|
|
33
|
+
if (tare > 17000) {
|
|
34
|
+
return scale_tare(tare, [0.3, 0.315, 0.385]);
|
|
35
|
+
}
|
|
36
|
+
return scale_tare(tare, [0.286, 0.379, 0.335]);
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"old_tare_truck.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/old_tare_truck.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAG3D;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,CAMzD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { VEHICLE_VERSION } from '../../contracts/vehicle_version.js';
|
|
2
|
+
import { scale_tare } from './old_tare_scale.js';
|
|
3
|
+
/**
|
|
4
|
+
* @param transport - Truck or VUC transport.
|
|
5
|
+
* @returns Tare per axle.
|
|
6
|
+
*/
|
|
7
|
+
export function truck_tare(transport) {
|
|
8
|
+
const multipliers = transport.vehicle_version === VEHICLE_VERSION.CAMINHAO_BITRUCK
|
|
9
|
+
? [0.2834844826865682, 0.28348448268656806, 0.43303103462686376]
|
|
10
|
+
: [0.452, 0.548];
|
|
11
|
+
return scale_tare(transport.tare, multipliers);
|
|
12
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Transport } from '../transports/transport.js';
|
|
2
|
+
/**
|
|
3
|
+
* @param transport - Parsed transport.
|
|
4
|
+
* @returns Vanderleia tare per axle.
|
|
5
|
+
*/
|
|
6
|
+
export declare function vanderleia_tare(transport: Transport): number[];
|
|
7
|
+
//# sourceMappingURL=old_tare_vanderleia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"old_tare_vanderleia.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/old_tare_vanderleia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAK3D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,CAQ9D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { scale_tare } from './old_tare_scale.js';
|
|
2
|
+
const TRUNCATED_LIMIT = 13000;
|
|
3
|
+
/**
|
|
4
|
+
* @param transport - Parsed transport.
|
|
5
|
+
* @returns Vanderleia tare per axle.
|
|
6
|
+
*/
|
|
7
|
+
export function vanderleia_tare(transport) {
|
|
8
|
+
const axle_1_max = transport.axle_manager.get_axle(1).max_supported_weight;
|
|
9
|
+
if (axle_1_max > TRUNCATED_LIMIT) {
|
|
10
|
+
return vanderleia_heavy_axle_tare(transport.tare);
|
|
11
|
+
}
|
|
12
|
+
return vanderleia_light_axle_tare(transport.tare);
|
|
13
|
+
}
|
|
14
|
+
function vanderleia_heavy_axle_tare(tare) {
|
|
15
|
+
if (tare > 23500) {
|
|
16
|
+
return scale_tare(tare, [0.22, 0.33, 0.155, 0.155, 0.14]);
|
|
17
|
+
}
|
|
18
|
+
if (tare > 21000) {
|
|
19
|
+
return scale_tare(tare, [0.25, 0.32, 0.145, 0.145, 0.14]);
|
|
20
|
+
}
|
|
21
|
+
return scale_tare(tare, [0.267, 0.314, 0.141, 0.141, 0.137]);
|
|
22
|
+
}
|
|
23
|
+
function vanderleia_light_axle_tare(tare) {
|
|
24
|
+
if (tare > 23500) {
|
|
25
|
+
return scale_tare(tare, [0.22, 0.24, 0.185, 0.185, 0.17]);
|
|
26
|
+
}
|
|
27
|
+
if (tare > 21000) {
|
|
28
|
+
return scale_tare(tare, [0.25, 0.2, 0.185, 0.185, 0.18]);
|
|
29
|
+
}
|
|
30
|
+
return scale_tare(tare, [0.267, 0.164, 0.191, 0.191, 0.187]);
|
|
31
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Transport } from '../transports/transport.js';
|
|
2
|
+
/**
|
|
3
|
+
* Converts loaded cargo per axle into utilization percentages.
|
|
4
|
+
*/
|
|
5
|
+
export declare class PercentageOnAxlesCalculator {
|
|
6
|
+
private readonly transport;
|
|
7
|
+
/**
|
|
8
|
+
* @param transport - Parsed transport.
|
|
9
|
+
*/
|
|
10
|
+
constructor(transport: Transport);
|
|
11
|
+
/**
|
|
12
|
+
* @param loaded_weight_list - Cargo load per axle index.
|
|
13
|
+
* @returns Utilization ratio per axle (bitrem: 4 entries).
|
|
14
|
+
*/
|
|
15
|
+
weight_on_axles_to_percentages(loaded_weight_list: number[]): number[];
|
|
16
|
+
private calculate_percentage;
|
|
17
|
+
private calculate_bitrem_joined_percentage;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=percentage_on_axles_calculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"percentage_on_axles_calculator.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/percentage_on_axles_calculator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D;;GAEG;AACH,qBAAa,2BAA2B;IAKxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC;;OAEG;gBAC0B,SAAS,EAAE,SAAS;IAGjD;;;OAGG;IACH,8BAA8B,CAAC,kBAAkB,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAgBtE,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,kCAAkC;CAQ7C"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { VEHICLE_TYPE } from '../../contracts/vehicle_type.js';
|
|
2
|
+
/**
|
|
3
|
+
* Converts loaded cargo per axle into utilization percentages.
|
|
4
|
+
*/
|
|
5
|
+
export class PercentageOnAxlesCalculator {
|
|
6
|
+
transport;
|
|
7
|
+
/**
|
|
8
|
+
* @param transport - Parsed transport.
|
|
9
|
+
*/
|
|
10
|
+
constructor(transport) {
|
|
11
|
+
this.transport = transport;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* @param loaded_weight_list - Cargo load per axle index.
|
|
15
|
+
* @returns Utilization ratio per axle (bitrem: 4 entries).
|
|
16
|
+
*/
|
|
17
|
+
weight_on_axles_to_percentages(loaded_weight_list) {
|
|
18
|
+
if (this.transport.vehicle_type === VEHICLE_TYPE.BITREM) {
|
|
19
|
+
return [
|
|
20
|
+
this.calculate_percentage(0, loaded_weight_list[0]),
|
|
21
|
+
this.calculate_percentage(1, loaded_weight_list[1]),
|
|
22
|
+
this.calculate_bitrem_joined_percentage(loaded_weight_list[2] + loaded_weight_list[3]),
|
|
23
|
+
this.calculate_percentage(4, loaded_weight_list[4])
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
return this.transport.axle_manager.list_axles_indexes().map((index) => this.calculate_percentage(index, loaded_weight_list[index]));
|
|
27
|
+
}
|
|
28
|
+
calculate_percentage(axle_index, loaded_weight) {
|
|
29
|
+
const axle = this.transport.axle_manager.get_axle(axle_index);
|
|
30
|
+
return (loaded_weight + axle.tare) / axle.max_supported_weight;
|
|
31
|
+
}
|
|
32
|
+
calculate_bitrem_joined_percentage(loaded_weight) {
|
|
33
|
+
const axle_2 = this.transport.axle_manager.get_axle(2);
|
|
34
|
+
const axle_3 = this.transport.axle_manager.get_axle(3);
|
|
35
|
+
const total_tare = axle_2.tare + axle_3.tare;
|
|
36
|
+
const total_max = axle_2.max_supported_weight + axle_3.max_supported_weight;
|
|
37
|
+
return (loaded_weight + total_tare) / total_max;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Transport } from '../transports/transport.js';
|
|
2
|
+
import { CenterOfMass } from '../items/center_of_mass.js';
|
|
3
|
+
import { ChassiForces } from './chassi_forces.js';
|
|
4
|
+
import { SemiReboqueBase } from './semi_reboque_base.js';
|
|
5
|
+
/**
|
|
6
|
+
* Quad-axle semi-trailer (equivalent semi + 2×2 split on axles 3–4).
|
|
7
|
+
*/
|
|
8
|
+
export declare class QuadSemiTrailerModel {
|
|
9
|
+
private readonly chassi;
|
|
10
|
+
readonly equivalent_semi_trailer: SemiReboqueBase;
|
|
11
|
+
/**
|
|
12
|
+
* @param transport - Parsed transport.
|
|
13
|
+
*/
|
|
14
|
+
constructor(transport: Transport);
|
|
15
|
+
/**
|
|
16
|
+
* @param center_of_mass_by_grouper - CM per grouper.
|
|
17
|
+
* @returns Four-axle chassis forces.
|
|
18
|
+
*/
|
|
19
|
+
calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=quad_semi_trailer_model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quad_semi_trailer_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/quad_semi_trailer_model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD;;GAEG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,eAAe,CAAA;IAEjD;;OAEG;gBACS,SAAS,EAAE,SAAS;IAQhC;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;CAoBlB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Chassi } from '../transports/chassi.js';
|
|
2
|
+
import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
|
|
3
|
+
import { ChassiForces } from './chassi_forces.js';
|
|
4
|
+
import { SemiReboqueBase } from './semi_reboque_base.js';
|
|
5
|
+
import { solve_linear_system } from '../../math/gaussian_elimination.js';
|
|
6
|
+
/**
|
|
7
|
+
* Quad-axle semi-trailer (equivalent semi + 2×2 split on axles 3–4).
|
|
8
|
+
*/
|
|
9
|
+
export class QuadSemiTrailerModel {
|
|
10
|
+
chassi;
|
|
11
|
+
equivalent_semi_trailer;
|
|
12
|
+
/**
|
|
13
|
+
* @param transport - Parsed transport.
|
|
14
|
+
*/
|
|
15
|
+
constructor(transport) {
|
|
16
|
+
this.chassi = new Chassi(transport);
|
|
17
|
+
this.equivalent_semi_trailer = new SemiReboqueBase(transport);
|
|
18
|
+
this.equivalent_semi_trailer.set_linear_system_matrix(get_equivalent_chassi_positions(this.chassi, transport));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @param center_of_mass_by_grouper - CM per grouper.
|
|
22
|
+
* @returns Four-axle chassis forces.
|
|
23
|
+
*/
|
|
24
|
+
calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
|
|
25
|
+
const equivalent = this.equivalent_semi_trailer
|
|
26
|
+
.calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper);
|
|
27
|
+
const equivalent_z = this.equivalent_semi_trailer.chassi_positions[4];
|
|
28
|
+
const independent = [
|
|
29
|
+
equivalent.get_force_on_axle(2),
|
|
30
|
+
equivalent.get_force_on_axle(2) * equivalent_z
|
|
31
|
+
];
|
|
32
|
+
const quad = solve_linear_system(generate_quad_matrix(this.chassi), independent);
|
|
33
|
+
const forces = new ChassiForces();
|
|
34
|
+
forces.add_axle_forces([
|
|
35
|
+
equivalent.get_force_on_axle(0),
|
|
36
|
+
equivalent.get_force_on_axle(1),
|
|
37
|
+
quad[0],
|
|
38
|
+
quad[1]
|
|
39
|
+
]);
|
|
40
|
+
forces.add_pin_forces([equivalent.get_force_on_pin(0)]);
|
|
41
|
+
return forces;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @param chassi - Chassis geometry.
|
|
46
|
+
* @returns 2×2 quad axle matrix.
|
|
47
|
+
*/
|
|
48
|
+
function generate_quad_matrix(chassi) {
|
|
49
|
+
const semi_axle_3 = chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1);
|
|
50
|
+
const semi_axle_4 = chassi.get_axle_position(3, CHASSI_REFERENCE.GROUPER_1);
|
|
51
|
+
return [[1, 1], [semi_axle_3, semi_axle_4]];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @param chassi - Chassis geometry.
|
|
55
|
+
* @param transport - Parsed transport.
|
|
56
|
+
* @returns Equivalent 5-position layout for semi base.
|
|
57
|
+
*/
|
|
58
|
+
function get_equivalent_chassi_positions(chassi, transport) {
|
|
59
|
+
const tractor_pin = chassi.get_pin_position(0, CHASSI_REFERENCE.TRACTOR);
|
|
60
|
+
const tractor_axle_1 = chassi.get_axle_position(0, CHASSI_REFERENCE.TRACTOR);
|
|
61
|
+
const tractor_axle_2 = chassi.get_axle_position(1, CHASSI_REFERENCE.TRACTOR);
|
|
62
|
+
const semi_pin = chassi.get_pin_position(0, CHASSI_REFERENCE.GROUPER_1);
|
|
63
|
+
const semi_axle_3 = chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1);
|
|
64
|
+
const semi_axle_4 = chassi.get_axle_position(3, CHASSI_REFERENCE.GROUPER_1);
|
|
65
|
+
const axle_3 = transport.axle_manager.get_axle(2);
|
|
66
|
+
const axle_4 = transport.axle_manager.get_axle(3);
|
|
67
|
+
const semi_equivalent = (semi_axle_3 * axle_3.max_supported_weight
|
|
68
|
+
+ semi_axle_4 * axle_4.max_supported_weight) / (axle_3.max_supported_weight + axle_4.max_supported_weight);
|
|
69
|
+
return [tractor_pin, tractor_axle_1, tractor_axle_2, semi_pin, semi_equivalent];
|
|
70
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Transport } from '../transports/transport.js';
|
|
2
|
+
import type { MultiContainerAllocatedItems } from '../items/multi_container_allocated_items.js';
|
|
3
|
+
import { Chassi } from '../transports/chassi.js';
|
|
4
|
+
import { CenterOfMass } from '../items/center_of_mass.js';
|
|
5
|
+
import { ChassiForces } from './chassi_forces.js';
|
|
6
|
+
/**
|
|
7
|
+
* Rodotrem: semi+tractor 4×4 plus simple trailer 2-axle lever.
|
|
8
|
+
*/
|
|
9
|
+
export declare class RodotremModel {
|
|
10
|
+
private readonly transport;
|
|
11
|
+
readonly chassi: Chassi;
|
|
12
|
+
private readonly matrix;
|
|
13
|
+
/**
|
|
14
|
+
* @param transport - Parsed transport.
|
|
15
|
+
*/
|
|
16
|
+
constructor(transport: Transport);
|
|
17
|
+
/**
|
|
18
|
+
* @param multi_items - Allocated items.
|
|
19
|
+
* @returns Loaded weights per axle.
|
|
20
|
+
*/
|
|
21
|
+
calculate_weight_on_axles(multi_items: MultiContainerAllocatedItems): number[];
|
|
22
|
+
/**
|
|
23
|
+
* @param multi_items - Allocated items.
|
|
24
|
+
* @returns Chassis forces.
|
|
25
|
+
*/
|
|
26
|
+
calculate_chassi_forces(multi_items: MultiContainerAllocatedItems): ChassiForces;
|
|
27
|
+
/**
|
|
28
|
+
* @param center_of_mass_by_grouper - CM for groupers 1 and 2.
|
|
29
|
+
* @returns Five-axle chassis forces.
|
|
30
|
+
*/
|
|
31
|
+
calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=rodotrem_model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rodotrem_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/rodotrem_model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAA;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD;;GAEG;AACH,qBAAa,aAAa;IAQV,OAAO,CAAC,QAAQ,CAAC,SAAS;IANtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC;;OAEG;gBAC0B,SAAS,EAAE,SAAS;IAMjD;;;OAGG;IACH,yBAAyB,CAAC,WAAW,EAAE,4BAA4B,GAAG,MAAM,EAAE;IAM9E;;;OAGG;IACH,uBAAuB,CAAC,WAAW,EAAE,4BAA4B,GAAG,YAAY;IAShF;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;CAmBlB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { calculate_chassi_forces_from_multi } from '../items/compute_grouper_center_of_mass.js';
|
|
2
|
+
import { Chassi } from '../transports/chassi.js';
|
|
3
|
+
import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
|
|
4
|
+
import { ChassiForces } from './chassi_forces.js';
|
|
5
|
+
import { solve_linear_system } from '../../math/gaussian_elimination.js';
|
|
6
|
+
/**
|
|
7
|
+
* Rodotrem: semi+tractor 4×4 plus simple trailer 2-axle lever.
|
|
8
|
+
*/
|
|
9
|
+
export class RodotremModel {
|
|
10
|
+
transport;
|
|
11
|
+
chassi;
|
|
12
|
+
matrix;
|
|
13
|
+
/**
|
|
14
|
+
* @param transport - Parsed transport.
|
|
15
|
+
*/
|
|
16
|
+
constructor(transport) {
|
|
17
|
+
this.transport = transport;
|
|
18
|
+
this.chassi = new Chassi(transport);
|
|
19
|
+
this.matrix = generate_rodotrem_semi_matrix(this.chassi);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @param multi_items - Allocated items.
|
|
23
|
+
* @returns Loaded weights per axle.
|
|
24
|
+
*/
|
|
25
|
+
calculate_weight_on_axles(multi_items) {
|
|
26
|
+
const forces = this.calculate_chassi_forces(multi_items);
|
|
27
|
+
return forces.list_axles_indexes().map((index) => forces.get_force_on_axle(index));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @param multi_items - Allocated items.
|
|
31
|
+
* @returns Chassis forces.
|
|
32
|
+
*/
|
|
33
|
+
calculate_chassi_forces(multi_items) {
|
|
34
|
+
return calculate_chassi_forces_from_multi(this.transport, multi_items, (center_of_mass_by_grouper) => this.calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @param center_of_mass_by_grouper - CM for groupers 1 and 2.
|
|
38
|
+
* @returns Five-axle chassis forces.
|
|
39
|
+
*/
|
|
40
|
+
calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
|
|
41
|
+
const semi_solution = solve_semi_tractor_system(this.matrix, center_of_mass_by_grouper[1]);
|
|
42
|
+
const simple_solution = solve_simple_trailer_system(this.chassi, center_of_mass_by_grouper[2]);
|
|
43
|
+
const forces = new ChassiForces();
|
|
44
|
+
forces.add_pin_forces([semi_solution[1]]);
|
|
45
|
+
forces.add_axle_forces([
|
|
46
|
+
semi_solution[3],
|
|
47
|
+
semi_solution[2],
|
|
48
|
+
semi_solution[0],
|
|
49
|
+
simple_solution[1],
|
|
50
|
+
simple_solution[0]
|
|
51
|
+
]);
|
|
52
|
+
return forces;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @param chassi - Chassis geometry.
|
|
57
|
+
* @returns Semi+tractor 4×4 matrix.
|
|
58
|
+
*/
|
|
59
|
+
function generate_rodotrem_semi_matrix(chassi) {
|
|
60
|
+
const tractor_pin = chassi.get_pin_position(0, CHASSI_REFERENCE.TRACTOR);
|
|
61
|
+
const tractor_axle_1 = chassi.get_axle_position(0, CHASSI_REFERENCE.TRACTOR);
|
|
62
|
+
const tractor_axle_2 = chassi.get_axle_position(1, CHASSI_REFERENCE.TRACTOR);
|
|
63
|
+
const semi_pin = chassi.get_pin_position(0, CHASSI_REFERENCE.GROUPER_1);
|
|
64
|
+
const semi_axle_3 = chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1);
|
|
65
|
+
return [
|
|
66
|
+
[1, 1, 0, 0],
|
|
67
|
+
[semi_axle_3, semi_pin, 0, 0],
|
|
68
|
+
[0, -1, 1, 1],
|
|
69
|
+
[0, -tractor_pin, tractor_axle_2, tractor_axle_1]
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @param matrix - Semi system matrix.
|
|
74
|
+
* @param center_of_mass - Semi trailer CM.
|
|
75
|
+
* @returns 4-vector solution.
|
|
76
|
+
*/
|
|
77
|
+
function solve_semi_tractor_system(matrix, center_of_mass) {
|
|
78
|
+
const independent = [
|
|
79
|
+
center_of_mass.mass,
|
|
80
|
+
center_of_mass.mass * center_of_mass.z,
|
|
81
|
+
0,
|
|
82
|
+
0
|
|
83
|
+
];
|
|
84
|
+
return solve_linear_system(matrix, independent);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* @param chassi - Chassis geometry.
|
|
88
|
+
* @param center_of_mass - Simple trailer CM.
|
|
89
|
+
* @returns Two-axle lever solution [axle4, axle5].
|
|
90
|
+
*/
|
|
91
|
+
function solve_simple_trailer_system(chassi, center_of_mass) {
|
|
92
|
+
const axle_4 = chassi.get_axle_position(3, CHASSI_REFERENCE.GROUPER_2);
|
|
93
|
+
const axle_5 = chassi.get_axle_position(4, CHASSI_REFERENCE.GROUPER_2);
|
|
94
|
+
const axle_4_force = center_of_mass.mass
|
|
95
|
+
* (axle_4 - center_of_mass.z)
|
|
96
|
+
/ (axle_4 - axle_5);
|
|
97
|
+
const axle_5_force = center_of_mass.mass
|
|
98
|
+
* (center_of_mass.z - axle_5)
|
|
99
|
+
/ (axle_4 - axle_5);
|
|
100
|
+
return [axle_4_force, axle_5_force];
|
|
101
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Transport } from '../transports/transport.js';
|
|
2
|
+
import { CenterOfMass } from '../items/center_of_mass.js';
|
|
3
|
+
import { ChassiForces } from './chassi_forces.js';
|
|
4
|
+
/**
|
|
5
|
+
* Semi-trailer 4×4 static system base.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SemiReboqueBase {
|
|
8
|
+
private readonly transport;
|
|
9
|
+
chassi_positions: number[];
|
|
10
|
+
private matrix;
|
|
11
|
+
/**
|
|
12
|
+
* @param transport - Parsed transport.
|
|
13
|
+
*/
|
|
14
|
+
constructor(transport: Transport);
|
|
15
|
+
/**
|
|
16
|
+
* @param center_of_mass_by_grouper - CM per grouper.
|
|
17
|
+
* @returns Chassis forces.
|
|
18
|
+
*/
|
|
19
|
+
calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
|
|
20
|
+
/**
|
|
21
|
+
* @param chassi_positions - Optional preset positions.
|
|
22
|
+
*/
|
|
23
|
+
set_linear_system_matrix(chassi_positions?: number[]): void;
|
|
24
|
+
/**
|
|
25
|
+
* @param center_of_mass - Load CM.
|
|
26
|
+
* @returns 4-vector solution.
|
|
27
|
+
*/
|
|
28
|
+
private solve_weight_on_axles_system;
|
|
29
|
+
/**
|
|
30
|
+
* @returns Default chassis positions for semi system.
|
|
31
|
+
*/
|
|
32
|
+
private get_chassi_positions;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=semi_reboque_base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semi_reboque_base.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/semi_reboque_base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD;;GAEG;AACH,qBAAa,eAAe;IAQZ,OAAO,CAAC,QAAQ,CAAC,SAAS;IANtC,gBAAgB,EAAE,MAAM,EAAE,CAAK;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAE/B;;OAEG;gBAC0B,SAAS,EAAE,SAAS;IAKjD;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;IASf;;OAEG;IACH,wBAAwB,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAa3D;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAWpC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAW/B"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Chassi } from '../transports/chassi.js';
|
|
2
|
+
import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
|
|
3
|
+
import { ChassiForces } from './chassi_forces.js';
|
|
4
|
+
import { solve_linear_system } from '../../math/gaussian_elimination.js';
|
|
5
|
+
/**
|
|
6
|
+
* Semi-trailer 4×4 static system base.
|
|
7
|
+
*/
|
|
8
|
+
export class SemiReboqueBase {
|
|
9
|
+
transport;
|
|
10
|
+
chassi_positions = [];
|
|
11
|
+
matrix = [];
|
|
12
|
+
/**
|
|
13
|
+
* @param transport - Parsed transport.
|
|
14
|
+
*/
|
|
15
|
+
constructor(transport) {
|
|
16
|
+
this.transport = transport;
|
|
17
|
+
this.set_linear_system_matrix();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @param center_of_mass_by_grouper - CM per grouper.
|
|
21
|
+
* @returns Chassis forces.
|
|
22
|
+
*/
|
|
23
|
+
calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
|
|
24
|
+
const solution = this.solve_weight_on_axles_system(center_of_mass_by_grouper[1]);
|
|
25
|
+
const forces = new ChassiForces();
|
|
26
|
+
forces.add_pin_forces([solution[1]]);
|
|
27
|
+
forces.add_axle_forces([solution[3], solution[2], solution[0]]);
|
|
28
|
+
return forces;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* @param chassi_positions - Optional preset positions.
|
|
32
|
+
*/
|
|
33
|
+
set_linear_system_matrix(chassi_positions) {
|
|
34
|
+
if (chassi_positions) {
|
|
35
|
+
this.chassi_positions = chassi_positions;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.chassi_positions = this.get_chassi_positions();
|
|
39
|
+
}
|
|
40
|
+
this.matrix = build_semi_matrix(this.chassi_positions);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @param center_of_mass - Load CM.
|
|
44
|
+
* @returns 4-vector solution.
|
|
45
|
+
*/
|
|
46
|
+
solve_weight_on_axles_system(center_of_mass) {
|
|
47
|
+
const independent = [
|
|
48
|
+
center_of_mass.mass,
|
|
49
|
+
center_of_mass.mass * center_of_mass.z,
|
|
50
|
+
0,
|
|
51
|
+
0
|
|
52
|
+
];
|
|
53
|
+
return solve_linear_system(this.matrix, independent);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @returns Default chassis positions for semi system.
|
|
57
|
+
*/
|
|
58
|
+
get_chassi_positions() {
|
|
59
|
+
const chassi = new Chassi(this.transport);
|
|
60
|
+
return [
|
|
61
|
+
chassi.get_pin_position(0, CHASSI_REFERENCE.TRACTOR),
|
|
62
|
+
chassi.get_axle_position(0, CHASSI_REFERENCE.TRACTOR),
|
|
63
|
+
chassi.get_axle_position(1, CHASSI_REFERENCE.TRACTOR),
|
|
64
|
+
chassi.get_pin_position(0, CHASSI_REFERENCE.GROUPER_1),
|
|
65
|
+
chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1)
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @param positions - Pin and axle positions.
|
|
71
|
+
* @returns 4×4 coefficient matrix.
|
|
72
|
+
*/
|
|
73
|
+
function build_semi_matrix(positions) {
|
|
74
|
+
const tractor_pin = positions[0];
|
|
75
|
+
const tractor_axle_1 = positions[1];
|
|
76
|
+
const tractor_axle_2 = positions[2];
|
|
77
|
+
const semi_pin = positions[3];
|
|
78
|
+
const semi_axle_3 = positions[4];
|
|
79
|
+
return [
|
|
80
|
+
[1, 1, 0, 0],
|
|
81
|
+
[semi_axle_3, semi_pin, 0, 0],
|
|
82
|
+
[0, -1, 1, 1],
|
|
83
|
+
[0, -tractor_pin, tractor_axle_2, tractor_axle_1]
|
|
84
|
+
];
|
|
85
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Transport } from '../transports/transport.js';
|
|
2
|
+
import type { MultiContainerAllocatedItems } from '../items/multi_container_allocated_items.js';
|
|
3
|
+
import { CenterOfMass } from '../items/center_of_mass.js';
|
|
4
|
+
import { ChassiForces } from './chassi_forces.js';
|
|
5
|
+
/**
|
|
6
|
+
* Semi-reboque axle weight with quad/bitruck variants.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SemiReboqueModel {
|
|
9
|
+
private readonly delegate;
|
|
10
|
+
private readonly transport;
|
|
11
|
+
private readonly merged_containers;
|
|
12
|
+
/**
|
|
13
|
+
* @param transport - Parsed transport.
|
|
14
|
+
*/
|
|
15
|
+
constructor(transport: Transport);
|
|
16
|
+
/**
|
|
17
|
+
* @param multi_items - Allocated items.
|
|
18
|
+
* @returns Loaded weights per axle.
|
|
19
|
+
*/
|
|
20
|
+
calculate_weight_on_axles(multi_items: MultiContainerAllocatedItems): number[];
|
|
21
|
+
/**
|
|
22
|
+
* @param multi_items - Allocated items.
|
|
23
|
+
* @returns Chassis forces.
|
|
24
|
+
*/
|
|
25
|
+
calculate_chassi_forces(multi_items: MultiContainerAllocatedItems): ChassiForces;
|
|
26
|
+
/**
|
|
27
|
+
* @param multi_items - Allocated items.
|
|
28
|
+
* @returns Deflection support pairs.
|
|
29
|
+
*/
|
|
30
|
+
calculate_support_data(multi_items: MultiContainerAllocatedItems): [number, number][];
|
|
31
|
+
/**
|
|
32
|
+
* @returns Merged grouper 1 length.
|
|
33
|
+
*/
|
|
34
|
+
calculate_container_length(): number;
|
|
35
|
+
/**
|
|
36
|
+
* @param center_of_mass_by_grouper - CM per grouper.
|
|
37
|
+
* @returns Chassis forces.
|
|
38
|
+
*/
|
|
39
|
+
calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=semi_reboque_model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semi_reboque_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/semi_reboque_model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAA;AAM/F,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAWjD;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGxB;IACD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkB;IAEpD;;OAEG;gBACS,SAAS,EAAE,SAAS;IAqBhC;;;OAGG;IACH,yBAAyB,CAAC,WAAW,EAAE,4BAA4B,GAAG,MAAM,EAAE;IAM9E;;;OAGG;IACH,uBAAuB,CAAC,WAAW,EAAE,4BAA4B,GAAG,YAAY;IAShF;;;OAGG;IACH,sBAAsB,CAAC,WAAW,EAAE,4BAA4B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;IAwBrF;;OAEG;IACH,0BAA0B,IAAI,MAAM;IAKpC;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;CAKlB"}
|