This commit is contained in:
2026-05-07 17:09:01 +08:00
parent 165855c50b
commit 39f5e9ca67
2 changed files with 47 additions and 29 deletions

View File

@@ -121,7 +121,7 @@ namespace 头罩视野.Views
testTimer.Stop();
}
//测试按钮
private async void Button_Click_Test(object sender, RoutedEventArgs e)
{
if (_isTesting)
@@ -152,8 +152,8 @@ namespace 头罩视野.Views
//maxBottomViewAngle = 0;
// 初始化全部设为0
_leftFinalData = Enumerable.Repeat(0, 243).ToList();
_rightFinalData = Enumerable.Repeat(0, 243).ToList();
//_leftFinalData = Enumerable.Repeat(0, 240).ToList();
//_rightFinalData = Enumerable.Repeat(0, 240).ToList();
// 面积也清空
@@ -206,8 +206,9 @@ namespace 头罩视野.Views
{
// ✅ 传值调用:把左右眼最终数据传给方法
_binocularTotalArea = GetArea.CalculateBinocularArea( _leftFinalData,_rightFinalData, _lightPositions);
//= (_leftTotalArea + _rightTotalArea) - congdie;
// 显示到界面
smsyarea.Text = _binocularTotalArea.ToString("0.00");
smsyarea.Text =_binocularTotalArea.ToString("0.00");
// 视野保存率(如果需要)
double binocularRateD = GetArea.CalcVisionRate(_binocularTotalArea);
@@ -291,10 +292,7 @@ namespace 头罩视野.Views
}
}
/// <summary>
/// 采集当前水平角度下的灯条数据,计算该角度的视野面积贡献,并累加到总视野面积中。
/// 每次调用只采集一次数据(对应一个水平角度,比如 10°、20°…
/// </summary>
//计算
private async Task calCurrentangle()
{
await ReadLightBarData();
@@ -319,27 +317,47 @@ namespace 头罩视野.Views
// 5. 根据当前测试模式(左眼/右眼/双目),累加面积
if (isLeftOnly)
{
//System.Diagnostics.Debug.WriteLine($"lightData 实际长度: {lightData.Length}");
_leftTotalArea += singleArea;
// 实时合并左眼:只要亮过一次,就永久亮
for (int i = 0; i < 243; i++)
{
if (lightData[i] == 1)
_leftFinalData[i] = 1;
}
// 安全获取真实长度
int realLength = lightData.Length;
// 初始化最终数据(永远和 lightData 一样长,不会错)
if (_leftFinalData == null || _leftFinalData.Count != realLength)
{
_leftFinalData = new List<int>(new int[realLength]);
}
for (int i = 0; i < realLength; i++)
{
if (lightData[i] == 1)
{
_leftFinalData[i] = 1;
}
}
}
else if (isRightOnly)
{
_rightTotalArea += singleArea;
// 实时合并右眼
for (int i = 0; i < 243; i++)
int realLength = lightData.Length;
if (_rightFinalData == null || _rightFinalData.Count != realLength)
{
_rightFinalData = new List<int>(new int[realLength]);
}
for (int i = 0; i < realLength; i++)
{
if (lightData[i] == 1)
{
_rightFinalData[i] = 1;
}
}
}
// 6. 更新下方视野的最大值(取所有角度中最大的)
if (bottomViewAngle > maxBottomViewAngle)