具体的建议信息

main
o__-xpf-__o 5 days ago
parent f70e298aae
commit 87c22f77e6

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