调试
This commit is contained in:
@@ -33,21 +33,21 @@ namespace 头罩视野.Services
|
||||
//计算双目视野
|
||||
|
||||
public static double CalculateBinocularArea(
|
||||
List<int> leftFinal,
|
||||
List<int> rightFinal,
|
||||
List<(int m, int n)> lightPositions)
|
||||
{
|
||||
// 双目并集:左眼亮 OR 右眼亮 = 亮
|
||||
int[] binocularData = new int[243];
|
||||
for (int i = 0; i < 243; i++)
|
||||
List<int> leftFinal,
|
||||
List<int> rightFinal,
|
||||
List<(int m, int n)> lightPositions)
|
||||
{
|
||||
binocularData[i] = leftFinal[i] | rightFinal[i];
|
||||
}
|
||||
// 取两者中较小的长度,防止一方数据被截断
|
||||
int length = Math.Min(leftFinal.Count, rightFinal.Count);
|
||||
int[] binocularData = new int[length];
|
||||
|
||||
// 计算面积
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
binocularData[i] = leftFinal[i] | rightFinal[i];
|
||||
}
|
||||
System.Diagnostics.Debug.WriteLine($"【双目亮灯】长度:{length}, 左眼亮灯:{leftFinal.Count}, 右眼亮灯:{rightFinal.Count}, 双目亮灯:{binocularData.Length}");
|
||||
return CalculateEllipseArea(binocularData, lightPositions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//下方视野 下方视野角度 = 人眼到「最低亮灯条」的夹角
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user