@ -77,6 +77,18 @@ class AngleDifference(private val angleObj: Angle) {
return listOf ( 100.0 , 95.0 , 180.0 , 85.0 , 90.0 , 75.0 , 160.0 , 170.0 )
}
// 根据不同的 listType 判断标准
private fun getStandardForListType ( listType : String ) : List < Double > {
return when ( listType ) {
" 1 " -> angleObj . standList ( ) . map { it . toDouble ( ) } // 转换为 List<Double>
" 2 " -> angleObj . deadliftList ( ) . map { it . toDouble ( ) } // 转换为 List<Double>
" 3 " -> angleObj . pushUpList ( ) . map { it . toDouble ( ) } // 转换为 List<Double>
" 4 " -> angleObj . squatList ( ) . map { it . toDouble ( ) } // 转换为 List<Double>
" 5 " -> angleObj . plankList ( ) . map { it . toDouble ( ) } // 转换为 List<Double>
else -> throw IllegalArgumentException ( " 未知的列表类型: $listType " ) // 无效的输入
}
}
// 计算角度差, 并根据角度值判断是否大于10, 返回相应的语句
fun calculateAngleDifference ( listType : String ) : String {
// 根据传入的参数选择不同的角度列表
@ -84,15 +96,20 @@ class AngleDifference(private val angleObj: Angle) {
" 1 " -> angleObj . standList ( ) // 选择站立姿势列表
" 2 " -> angleObj . deadliftList ( ) // 选择硬拉列表
" 3 " -> angleObj . pushUpList ( ) // 选择俯卧撑列表
" 4 " -> angleObj . squatList ( ) // 选择深蹲列表
" 5 " -> angleObj . plankList ( ) // 选择平板支撑列表
else -> throw IllegalArgumentException ( " 未知的列表类型: $listType " ) // 处理无效的输入
}
// 获取另一个类中的角度列表
val angles = getAngles ( )
// 获取当前listType对应的标准列表
val standardList = getStandardForListType ( listType )
// 确保两个列表的大小一致
if ( selectedList . size != angles . size ) {
throw IllegalArgumentException ( " 两个列表的大小不一致! " )
if ( selectedList . size != angles . size || selectedList . size != standardList . size ) {
throw IllegalArgumentException ( " 三 个列表的大小不一致!" )
}
// 计算差值并检查条件
@ -101,30 +118,42 @@ class AngleDifference(private val angleObj: Angle) {
differenceList . add ( ( selectedList [ i ] - angles [ i ] ) . toDouble ( ) )
}
// 检查差值列表中的每个值
// 根据listType的不同, 提供不同标准的判断
val absoluteValues = differenceList . map { abs ( it ) }
if ( absoluteValues . all { it < 10 } ) {
// 如果所有值的绝对值都小于10
return " 动作标准 "
} else {
// 根据不同的位置返回不同的语句
for ( i in absoluteValues . indices ) {
if ( absoluteValues [ i ] > 10 ) {
return when ( i ) {
0 -> " 第一个位置的角度差值超出标准,请调整! "
1 -> " 第二个位置的角度差值超出标准,请调整! "
2 -> " 第三个位置的角度差值超出标准,请调整! "
3 -> " 第四个位置的角度差值超出标准,请调整! "
4 -> " 第五个位置的角度差值超出标准,请调整! "
5 -> " 第六个位置的角度差值超出标准,请调整! "
6 -> " 第七个位置的角度差值超出标准,请调整! "
7 -> " 第八个位置的角度差值超出标准,请调整! "
else -> " 未知位置的角度差值超出标准,请检查! "
// 检查角度差是否符合标准
val warningMessages = mutableListOf < String > ( )
// 替换角度位置的名称
val bodyParts = listOf (
" 左肩 " , " 右肩 " , " 左肘 " , " 右肘 " , " 左髋 " , " 右髋 " , " 左膝 " , " 右膝 "
)
for ( i in absoluteValues . indices ) {
val standard = standardList [ i ]
val absoluteDifference = absoluteValues [ i ]
if ( absoluteDifference > 10 ) {
// 根据角度差的正负判断提示语
val direction = if ( differenceList [ i ] > 0 ) " 增大 " else " 减小 "
// 根据listType提供不同的标准和建议
warningMessages . add (
when ( listType ) {
" 1 " -> " ${bodyParts[i]} 的角度差值超出标准( ${standard} °),请 $direction 相应位置的角度! "
" 2 " -> " ${bodyParts[i]} 的角度差值超出标准( ${standard} °),请 $direction 相应位置的角度! "
" 3 " -> " ${bodyParts[i]} 的角度差值超出标准( ${standard} °),请 $direction 相应位置的角度! "
" 4 " -> " ${bodyParts[i]} 的角度差值超出标准( ${standard} °),请 $direction 相应位置的角度! "
" 5 " -> " ${bodyParts[i]} 的角度差值超出标准( ${standard} °),请 $direction 相应位置的角度! "
else -> " 未知类型的角度差值超出标准,请检查! "
}
}
)
}
}
return " 未知情况 "
// 如果没有超出标准的位置
return if ( warningMessages . isEmpty ( ) ) {
" 动作标准 "
} else {
warningMessages . joinToString ( " \n " )
}
}
}
}