具体的建议信息

main
o__-xpf-__o 2 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)
}
// 根据不同的 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")
}
}
}
}

Loading…
Cancel
Save