EG/plugins/user/rigid_body_physics/test_materials.py
2025-12-12 16:16:15 +08:00

181 lines
6.7 KiB
Python

"""
物理材质系统测试脚本
测试增强的物理材质功能
"""
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from panda3d.core import Vec3, Vec4, Point3
from plugins.user.rigid_body_physics.core.material import PhysicsMaterial
def test_advanced_material_features():
"""测试增强的材质功能"""
print("=== 测试增强的物理材质系统 ===\n")
# 创建一个测试材质
test_material = PhysicsMaterial('test_material', material_type=PhysicsMaterial.TYPE_METAL)
print("1. 测试热效应计算:")
# 测试热效应计算
temp_change = test_material.calculate_thermal_effect(0.1, environment_temp=25.0)
print(f" 基础温度变化: {temp_change:.4f}°C")
# 测试带热源的热效应计算
heat_sources = [{'position': Point3(0, 0, 0), 'temperature': 100.0, 'radius': 1.0}]
thermal_result = test_material.calculate_thermal_effect(0.1, environment_temp=25.0, heat_sources=heat_sources)
print(f" 带热源温度变化: {thermal_result:.4f}°C")
# 测试热膨胀
expansion_factor = test_material.calculate_thermal_expansion(temp_change)
print(f" 热膨胀因子: {expansion_factor:.6f}")
print()
print("2. 测试环境效应:")
# 测试环境效应
weather_conditions = {
'rain': 0.8,
'wind': 0.5,
'humidity': 0.9,
'uv': 0.7
}
env_effects = test_material.calculate_environmental_effects(1.0, weather_conditions)
print(f" 环境效应结果: {env_effects}")
print(f" 当前湿润度: {test_material.state['wetness']:.3f}")
print(f" 当前污染度: {test_material.state['contamination']:.3f}")
print(f" 当前磨损度: {test_material.state['wear']:.3f}")
print()
print("3. 测试老化模拟:")
# 测试老化模拟
environmental_factors = {
'temperature': 60, # 60°C
'humidity': 0.9, # 90%湿度
'chemical_exposure': 0.3
}
aging_result = test_material.simulate_aging(10.0, environmental_factors)
print(f" 老化结果: {aging_result}")
print(f" 当前磨损度: {test_material.state['wear']:.3f}")
print()
print("4. 测试摩擦系数计算:")
# 测试摩擦系数计算
other_material = PhysicsMaterial('other_material', material_type=PhysicsMaterial.TYPE_CONCRETE)
effective_friction = test_material.get_effective_friction(
other_material=other_material,
velocity=Vec3(2.0, 0, 0),
normal_force=100.0,
surface_area=0.5
)
print(f" 有效摩擦系数: {effective_friction:.4f}")
dynamic_friction = test_material.get_dynamic_friction(
other_material=other_material,
velocity=Vec3(2.0, 0, 0),
normal_force=100.0,
surface_area=0.5
)
print(f" 动态摩擦系数: {dynamic_friction:.4f}")
print()
print("5. 测试恢复系数计算:")
# 测试恢复系数计算
effective_restitution = test_material.get_effective_restitution(
other_material=other_material,
impact_velocity=10.0,
temperature=50.0
)
print(f" 有效恢复系数: {effective_restitution:.4f}")
print()
print("6. 测试能量吸收:")
# 测试能量吸收
energy_absorption = test_material.get_energy_absorption(100.0, 0.1)
print(f" 能量吸收结果: {energy_absorption}")
print(f" 当前温度: {test_material.state['temperature']:.2f}°C")
print(f" 当前应力: {test_material.state['stress']:.2f}")
print()
print("7. 测试磨损和疲劳:")
# 测试磨损率计算
wear_rate = test_material.calculate_wear_rate(Vec3(1.0, 0, 0), 50.0, 1.0)
print(f" 磨损率: {wear_rate:.6f}")
# 测试疲劳累积
fatigue_result = test_material.calculate_fatigue_accumulation(200.0, 1000)
print(f" 疲劳累积结果: {fatigue_result}")
print(f" 当前疲劳度: {test_material.state['fatigue']:.4f}")
print()
print("8. 测试流体动力学:")
# 测试流体动力学
fluid_result = test_material.calculate_fluid_dynamics(Vec3(5.0, 0, 0), 1000.0, 1.0)
print(f" 流体动力学结果: {fluid_result}")
print(f" 当前湿润度: {test_material.state['wetness']:.3f}")
print()
print("9. 测试化学反应:")
# 测试化学反应
chemical_composition = {
'acid': 0.5,
'base': 0.2,
'oxidizer': 0.3
}
chemical_result = test_material.calculate_chemical_reaction(chemical_composition, temperature=30.0, time_delta=1.0)
print(f" 化学反应结果: {chemical_result}")
print(f" 当前污染度: {test_material.state['contamination']:.3f}")
print()
print("10. 测试失效准则:")
# 测试失效准则
stress_tensor = [1000.0, 500.0, -200.0, 100.0, 50.0, 75.0]
failure_analysis = test_material.check_failure_criteria(stress_tensor)
print(f" 失效分析结果: {failure_analysis}")
print()
print("11. 测试结构完整性:")
# 测试结构完整性
integrity_assessment = test_material.get_structural_integrity()
print(f" 结构完整性: {integrity_assessment}")
print()
print("12. 测试历史统计:")
# 测试历史统计
aging_stats = test_material.get_aging_stats()
fatigue_stats = test_material.get_fatigue_stats()
chemical_stats = test_material.get_chemical_stats()
print(f" 老化统计: {aging_stats}")
print(f" 疲劳统计: {fatigue_stats}")
print(f" 化学统计: {chemical_stats}")
print()
print("=== 测试完成 ===")
def test_predefined_materials():
"""测试预定义材质"""
print("=== 测试预定义材质 ===\n")
# 测试几种预定义材质
material_names = ['concrete', 'metal', 'wood', 'rubber']
for name in material_names:
material = PhysicsMaterial.MATERIALS.get(name)
if material:
print(f"{name.capitalize()} 材质属性:")
print(f" 密度: {material.properties['density']} kg/m³")
print(f" 摩擦系数: {material.properties['friction']}")
print(f" 恢复系数: {material.properties['restitution']}")
if 'tensile_strength' in material.properties:
print(f" 抗拉强度: {material.properties['tensile_strength']} Pa")
if 'compressive_strength' in material.properties:
print(f" 抗压强度: {material.properties['compressive_strength']} Pa")
print()
if __name__ == "__main__":
test_advanced_material_features()
print("\n" + "="*50 + "\n")
test_predefined_materials()