1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
| """ 座舱触屏示能性设计评估框架 基于 MDPI Applied Sciences 2026 论文
核心维度: 1. 物理示能 - 界面是否暗示可操作性 2. 认知示能 - 操作意图是否清晰 3. 感知示能 - 反馈是否即时 4. 安全示能 - 是否减少分心 """
from enum import Enum from dataclasses import dataclass from typing import List, Tuple
class AffordanceDimension(Enum): PHYSICAL = "物理示能" COGNITIVE = "认知示能" PERCEPTUAL = "感知示能" SAFETY = "安全示能"
@dataclass class InterfaceElement: """界面元素评估""" name: str element_type: str dimensions: dict def get_total_score(self) -> float: """综合评分""" return sum(self.dimensions.values()) / len(self.dimensions) def get_safety_rating(self) -> str: """安全等级""" score = self.dimensions.get(AffordanceDimension.SAFETY.value, 0) if score >= 8: return "✅ 安全" elif score >= 5: return "⚠️ 中等风险" else: return "❌ 高风险"
class CabinInterfaceEvaluator: """ 座舱界面安全评估器 基于4维示能性框架评估交互方案 """ CRITERIA = { AffordanceDimension.PHYSICAL.value: { 'shape_hint': '形状是否暗示操作方式', 'size': '尺寸是否足够(>15mm触控区)', 'spacing': '间距是否充足(>10mm)', 'texture': '纹理是否提供触觉线索', }, AffordanceDimension.COGNITIVE.value: { 'label_clarity': '标签是否清晰', 'icon_recognizability': '图标是否可识别', 'menu_depth': '菜单层级是否≤2层', 'operation_steps': '操作步骤是否≤3步', }, AffordanceDimension.PERCEPTUAL.value: { 'response_time': '响应是否<100ms', 'visual_feedback': '是否有视觉反馈', 'haptic_feedback': '是否有触觉反馈', 'audio_feedback': '是否有声音反馈', }, AffordanceDimension.SAFETY.value: { 'glance_time': '单次扫视是否<2秒', 'total_time': '总操作时间是否<5秒', 'error_rate': '误操作率是否<5%', 'recoverability': '误操作是否可快速恢复', }, } def evaluate_interface(self, elements: List[InterfaceElement]) -> dict: """ 评估座舱界面方案 Returns: report: 评估报告 """ report = { 'elements': [], 'overall_safety': 0, 'risk_factors': [], 'recommendations': [], } total_safety = 0 for elem in elements: elem_report = { 'name': elem.name, 'type': elem.element_type, 'score': elem.get_total_score(), 'safety': elem.get_safety_rating(), 'dimensions': elem.dimensions, } report['elements'].append(elem_report) total_safety += elem.dimensions.get( AffordanceDimension.SAFETY.value, 0 ) report['overall_safety'] = total_safety / len(elements) if elements else 0 if report['overall_safety'] < 5: report['risk_factors'].append('整体安全评分过低') report['recommendations'].append( '建议增加物理快捷按钮替代触屏操作' ) for elem in report['elements']: if elem['dimensions'].get('glance_time', 10) < 5: report['risk_factors'].append( f"{elem['name']}: 单次扫视时间过长" ) return report
if __name__ == "__main__": evaluator = CabinInterfaceEvaluator() print("=" * 60) print("方案1: 纯触屏界面") touch_screen = [ InterfaceElement( name="导航设置", element_type="menu", dimensions={ "物理示能": 3, "认知示能": 4, "感知示能": 5, "安全示能": 2, } ), InterfaceElement( name="空调调节", element_type="slider", dimensions={ "物理示能": 4, "认知示能": 5, "感知示能": 4, "安全示能": 3, } ), ] result1 = evaluator.evaluate_interface(touch_screen) print(f" 整体安全评分: {result1['overall_safety']:.1f}/10") for elem in result1['elements']: print(f" {elem['name']}: {elem['score']:.1f}/10 - {elem['safety']}") print(f" 风险: {result1['risk_factors']}") print("\n方案2: 物理+触屏混合界面") hybrid = [ InterfaceElement( name="空调物理按钮", element_type="button", dimensions={ "物理示能": 9, "认知示能": 8, "感知示能": 7, "安全示能": 9, } ), InterfaceElement( name="导航触屏", element_type="menu", dimensions={ "物理示能": 4, "认知示能": 5, "感知示能": 6, "安全示能": 4, } ), ] result2 = evaluator.evaluate_interface(hybrid) print(f" 整体安全评分: {result2['overall_safety']:.1f}/10") for elem in result2['elements']: print(f" {elem['name']}: {elem['score']:.1f}/10 - {elem['safety']}") print("\n方案3: AR-HUD+语音界面") ar_hud = [ InterfaceElement( name="AR导航", element_type="hud_overlay", dimensions={ "物理示能": 7, "认知示能": 9, "感知示能": 9, "安全示能": 10, } ), InterfaceElement( name="语音控制", element_type="voice", dimensions={ "物理示能": 8, "认知示能": 7, "感知示能": 8, "安全示能": 9, } ), ] result3 = evaluator.evaluate_interface(ar_hud) print(f" 整体安全评分: {result3['overall_safety']:.1f}/10") for elem in result3['elements']: print(f" {elem['name']}: {elem['score']:.1f}/10 - {elem['safety']}") print("\n✅ 评估框架测试通过")
|