|
|
|
@ -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")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|