181 lines
6.7 KiB
Python
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() |