页面逻辑调整
This commit is contained in:
@@ -7,6 +7,15 @@ namespace 头罩视野.Services
|
||||
{
|
||||
class GetArea
|
||||
{
|
||||
|
||||
|
||||
|
||||
// 设备固定参数
|
||||
private static double R = 330; // 半球半径
|
||||
private static double angleStep = 10; // 每格角度
|
||||
|
||||
// 定义参数(和你代码里一致)
|
||||
private const int totalLights = 81;
|
||||
//public const double standardArea = 140;
|
||||
|
||||
/// <summary>有效亮度阈值:区分有效视野和噪声/遮挡的门槛设备标定经验值,≥12判定为有效视野</summary>
|
||||
@@ -33,165 +42,50 @@ namespace 头罩视野.Services
|
||||
//双目重叠标准
|
||||
public static double StandardBinocular = 4150;
|
||||
|
||||
// 剔除异常值,用相邻数据插值
|
||||
//空白视野面积计算
|
||||
public static readonly double _standardTotalArea = 2 * Math.PI * 330 * 330;
|
||||
|
||||
public static List<dynamic> RemoveOutliers(List<dynamic> data)
|
||||
public static double GetBlankViewArea(double binocularTotalArea)
|
||||
{
|
||||
for (int i = 3; i < data.Count - 1; i++)
|
||||
{
|
||||
if (Math.Abs(data[i] - data[i - 1]) > OutlierDiffThreshold && Math.Abs(data[i] - data[i + 1]) > OutlierDiffThreshold)
|
||||
{
|
||||
data[i] = (dynamic)((data[i - 1] + data[i + 1]) / 2);
|
||||
}
|
||||
//过滤无效信号
|
||||
if (data[i] < threshold)
|
||||
{
|
||||
data[i] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
return data;
|
||||
// 公式:空白 = 标准总面积 - 双目总视野
|
||||
return _standardTotalArea - binocularTotalArea;
|
||||
}
|
||||
|
||||
//下方视野
|
||||
// 固定参数:每一格灯代表 10 度(你的设备标准)
|
||||
|
||||
/// <summary>
|
||||
/// 计算单眼视野面积
|
||||
/// 计算 下方视野角度(单位:度 °)
|
||||
/// </summary>
|
||||
/// <param name="groupData">20组数据,每组lightNum个通道</param>
|
||||
/// <param name="threshold">有效亮度阈值(如12)</param>
|
||||
/// <param name="standardArea">(如140)</param>
|
||||
/// <returns>计算好的面积</returns>
|
||||
///
|
||||
public static double CalculateEyeArea(List<dynamic> groupData)
|
||||
public static double CalculateBottomViewAngle(int[] lightData, List<(int m, int n)> lightPositions)
|
||||
{
|
||||
double[] avg = new double[lightNum];
|
||||
for (int c = 0; c < lightNum; c++)
|
||||
// 存所有亮灯的角度
|
||||
List<double> angles = new List<double>();
|
||||
|
||||
for (int i = 0; i < lightData.Length; i++)
|
||||
{
|
||||
double sum = 0;
|
||||
foreach (var g in groupData) sum += g[c];
|
||||
avg[c] = sum / groupData.Count;
|
||||
}
|
||||
|
||||
int valid = avg.Count(v => v >= threshold);
|
||||
return (valid / lightNum) * standardArea;
|
||||
}
|
||||
|
||||
//计算双目视野面积
|
||||
/// <summary>
|
||||
/// 计算双目视野面积(左右眼同时可见)
|
||||
/// </summary>
|
||||
public static double CalcBinocularArea(
|
||||
List<dynamic> leftGroups,
|
||||
List<dynamic> rightGroups
|
||||
)
|
||||
{
|
||||
// 1. 左眼平均数据
|
||||
double[] leftAvg = GetEyeAvgArray(leftGroups);
|
||||
|
||||
// 2. 右眼平均数据
|
||||
double[] rightAvg = GetEyeAvgArray(rightGroups);
|
||||
|
||||
// 3. 双目同时有效点数(左右都亮才算)
|
||||
int biValid = 0;
|
||||
for (int i = 0; i < lightNum; i++)
|
||||
{
|
||||
if (leftAvg[i] >= threshold && rightAvg[i] >= threshold)
|
||||
biValid++;
|
||||
}
|
||||
|
||||
// 4. 双目视野面积
|
||||
return (biValid / lightNum) * standardArea;
|
||||
}
|
||||
|
||||
//下方视野角度
|
||||
/// <summary>
|
||||
/// GB2890-2022 计算 单眼下方视野角度
|
||||
/// eyeData:单眼lightNum路平均数据数组
|
||||
/// threshold:有效亮度阈值
|
||||
/// </summary>
|
||||
public static double CalcLowerAngle(double[] eyeData, double perAngle)
|
||||
{
|
||||
// 总lightNum点 每点5°
|
||||
int totalPoint = lightNum;
|
||||
|
||||
// 国标:最下方起始点位(第54号开始为正下方)
|
||||
int startDownIndex = 54;
|
||||
|
||||
int validCount = 0;
|
||||
|
||||
// 从最下方向上 连续检测有效点
|
||||
for (int i = 0; i < lightNum / 2; i++)
|
||||
{
|
||||
int idx = (startDownIndex + i) % totalPoint;
|
||||
|
||||
if (eyeData[idx] >= threshold)
|
||||
if (lightData[i] == 1)
|
||||
{
|
||||
validCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 断开直接停止
|
||||
break;
|
||||
var (m, n) = lightPositions[i];
|
||||
double angle = m * angleStep;
|
||||
angles.Add(angle);
|
||||
}
|
||||
}
|
||||
|
||||
// 下方视野角度 = 有效点数 × 单步角度
|
||||
return validCount * perAngle;
|
||||
// 没有亮灯返回 0
|
||||
if (angles.Count == 0)
|
||||
return 0;
|
||||
|
||||
// 最大角度 = 最下方视野
|
||||
return angles.Max();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 计算单眼lightNum点通道平均值数组
|
||||
/// </summary>
|
||||
/// <param name="eyeGroups">多组采样数据集合</param>
|
||||
/// <returns>lightNum点通道平均值数组</returns>
|
||||
public static double[] GetEyeAvgArray(List<dynamic> eyeGroups)
|
||||
{
|
||||
if (eyeGroups == null || eyeGroups.Count == 0)
|
||||
return new double[lightNum]; // 无数据时返回全0数组
|
||||
|
||||
double[] avg = new double[lightNum];
|
||||
|
||||
for (int i = 0; i < lightNum; i++)
|
||||
{
|
||||
double sum = 0;
|
||||
foreach (var group in eyeGroups)
|
||||
{
|
||||
sum += group[i];
|
||||
}
|
||||
avg[i] = sum / eyeGroups.Count;
|
||||
}
|
||||
|
||||
return avg;
|
||||
}
|
||||
|
||||
|
||||
//视野保存率
|
||||
//double totalSaveRate = (总视野面积 / 标准总视野面积) * 100;
|
||||
public static class VisionCalculator
|
||||
public static double CalcVisionRate(double binocularRate)
|
||||
{
|
||||
/// <summary>
|
||||
/// 计算视野保存率
|
||||
/// </summary>
|
||||
/// <param name="actualArea">实测面积</param>
|
||||
/// <param name="standardArea">标准面积</param>
|
||||
/// <returns>保存率 %</returns>
|
||||
public static double CalculateVisionSaveRate(double actualArea)
|
||||
{
|
||||
|
||||
return (actualArea / standardArea) * 100;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//===== 2. 传入你采集的实测面积 =====
|
||||
// leftArea:左眼实测 rightArea:右眼实测 binArea:双目重叠实测
|
||||
public static double CalcVisionRate(double leftArea, double rightArea)
|
||||
{
|
||||
// 总视野实测 = 左+右
|
||||
double totalSi = leftArea + rightArea;
|
||||
|
||||
|
||||
// 1. 总视野保存率
|
||||
double ratioTotal = totalSi / StandardTotal;
|
||||
double ratioTotal = binocularRate / StandardTotal;
|
||||
double gammaTotal = GetVisionGamma(ratioTotal);
|
||||
double totalRate = gammaTotal * ratioTotal * 100;
|
||||
return (totalRate);
|
||||
@@ -230,19 +124,6 @@ namespace 头罩视野.Services
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 设备固定参数
|
||||
private static double R = 330; // 半球半径
|
||||
private static double angleStep = 10; // 每格角度
|
||||
|
||||
// 定义参数(和你代码里一致)
|
||||
private const int totalLights = 81;
|
||||
|
||||
// 传入:72个灯的亮灭数据(0=灭,1=亮)
|
||||
// 返回:椭圆面积
|
||||
public static double CalculateEllipseArea(int[] lightData, List<(int m, int n)> lightPositions)
|
||||
@@ -301,7 +182,6 @@ namespace 头罩视野.Services
|
||||
|
||||
// 最小二乘法拟合椭圆(核心算法)cx:椭圆中心点的 X 坐标 cy:椭圆中心点的 Y 坐标 a:椭圆的长半轴长度(较大的那个半径)b:椭圆的短半轴长度(较小的那个半径)
|
||||
|
||||
|
||||
private static (double cx, double cy, double a, double b, double area) FitEllipse(List<Point> points)
|
||||
{
|
||||
int n = points.Count;
|
||||
@@ -347,20 +227,6 @@ namespace 头罩视野.Services
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
//private static System.Drawing.Point GetLightPoint(int m, int n)
|
||||
//{
|
||||
// double radH = m * angleStep * Math.PI / 180;
|
||||
// double radV = n * angleStep * Math.PI / 180;
|
||||
// double x = R * Math.Tan(radH);
|
||||
// double y = R * Math.Tan(radV);
|
||||
// return new System.Drawing.Point((int)x, (int)y);
|
||||
//}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Modbus.Device;
|
||||
using Microsoft.Win32;
|
||||
using Modbus.Device;
|
||||
using Sunny.UI;
|
||||
|
||||
//using RecordDateView;
|
||||
@@ -37,7 +38,8 @@ namespace 头罩视野.Views
|
||||
// 保存上一条数据(用于去重)
|
||||
private TestDataStore.TestRecord? _lastRecord;
|
||||
private object btnLeftEye;
|
||||
|
||||
// 表跟数据存储列表
|
||||
public List<dynamic> DataList = new List<dynamic>();
|
||||
|
||||
public PageTest()
|
||||
{
|
||||
@@ -178,8 +180,7 @@ namespace 头罩视野.Views
|
||||
ma.BtnClickFunction(Function.ButtonType.复归型, 100);
|
||||
ButtonTest.Content = "测试中....";
|
||||
testTimer.Start();
|
||||
//var recordPage = GetRecordDatePage();
|
||||
//recordPage?.StartPlcReadTimer(100);
|
||||
|
||||
|
||||
}
|
||||
//停止btn
|
||||
@@ -188,8 +189,7 @@ namespace 头罩视野.Views
|
||||
ma.BtnClickFunction(Function.ButtonType.复归型, 103);
|
||||
ButtonTest.Content = "测试";
|
||||
testTimer.Stop();
|
||||
var recordPage = GetRecordDatePage();
|
||||
recordPage?.StopPlcTimer();
|
||||
|
||||
|
||||
}
|
||||
private async void Timer_Tick(object sender, EventArgs e)
|
||||
@@ -285,7 +285,7 @@ namespace 头罩视野.Views
|
||||
};
|
||||
return timer;
|
||||
}
|
||||
|
||||
private List<(int m, int n)> _lightPositions;
|
||||
private async System.Threading.Tasks.Task ReadAddr262DataAsync()
|
||||
{
|
||||
try
|
||||
@@ -305,23 +305,45 @@ namespace 头罩视野.Views
|
||||
//ReadAndUpdateFloatAsync(430 ,2, sybhl, "F2", " "),
|
||||
|
||||
//前1从站地址,后1是长度
|
||||
|
||||
ReadLightBarData()
|
||||
|
||||
};
|
||||
isFinished = _modbusMaster.ReadCoils(1, 102, 1)[0];
|
||||
isFinished = _modbusMaster.ReadCoils(1, 102, 1)[0];
|
||||
if (isFinished)
|
||||
{
|
||||
int.TryParse(fbspeed.Text, out int speedValue);
|
||||
// 还不确定?
|
||||
var recordPage = GetRecordDatePage();
|
||||
recordPage?.StopPlcTimer();
|
||||
recordPage?.getAllData(recordPage.LeftEyeDataList, recordPage.RightEyeDataList, int.Parse(fbspeed.Text));
|
||||
Button_Click_Stop(null, null);
|
||||
//开始计算视野面积
|
||||
// 1. 把DataList(List<dynamic>)转成方法需要的int[]
|
||||
int[] lightData = DataList.Cast<int>().ToArray();
|
||||
|
||||
//2. 调用CalculateEllipseArea,传入两个参数
|
||||
double area = GetArea.CalculateEllipseArea(lightData, _lightPositions);
|
||||
|
||||
//值显示在页面,
|
||||
zmsyarea.Text = GlobalData.LeftEyeArea.ToString("0.00"); // 左目
|
||||
smsyarea.Text = GlobalData.BinocularArea.ToString("0.00"); // 双目
|
||||
kbsyarea.Text = GlobalData.BlankArea.ToString("0.00"); // 空白
|
||||
ymsyarea.Text = GlobalData.RightEyeArea.ToString("0.00"); // 右目
|
||||
xfsyarea.Text = GlobalData.LowerVision.ToString("0.00"); // 下方
|
||||
sybhl.Text = GlobalData.VisionRetentionRate.ToString("0.00"); // 视野保存率
|
||||
if (btnRight.Content.ToString() == "右眼开"&& btnLeft.Content.ToString() == "左眼关")
|
||||
{
|
||||
zmsyarea.Text = area.ToString("0.00");//左目
|
||||
}
|
||||
else if (btnRight.Content.ToString() == "右眼关" && btnLeft.Content.ToString() == "左眼开")
|
||||
{
|
||||
ymsyarea.Text = area.ToString("0.00"); //右目
|
||||
}
|
||||
else if(btnRight.Content.ToString() == "右眼关" && btnLeft.Content.ToString() == "左眼关")
|
||||
{
|
||||
smsyarea.Text = area.ToString("0.00"); // 双目
|
||||
}
|
||||
// 空白
|
||||
double binocularTotalArea = double.Parse(smsyarea.Text);
|
||||
double blankArea = GetArea.GetBlankViewArea(binocularTotalArea);
|
||||
kbsyarea.Text = blankArea.ToString("0.00"); // 保留2位小数
|
||||
|
||||
|
||||
double BottomViewAngle = GetArea.CalculateEllipseArea(lightData, _lightPositions);
|
||||
xfsyarea.Text = BottomViewAngle.ToString("0.00"); // 下方
|
||||
|
||||
|
||||
double binocularRate = GetArea.CalcVisionRate(binocularTotalArea);
|
||||
sybhl.Text = binocularRate.ToString("0.00"); // 视野保存率
|
||||
}
|
||||
await Task.WhenAll(tasks);
|
||||
}
|
||||
@@ -400,56 +422,7 @@ namespace 头罩视野.Views
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ReadAndUpdateFloatAsync(int address, int length, System.Windows.Controls.TextBlock control, string format, string unit)
|
||||
{
|
||||
try
|
||||
{
|
||||
ushort[] registers = await Task.Run(async () =>
|
||||
await _modbusMaster!.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length)
|
||||
);
|
||||
|
||||
if (registers != null && registers.Length >= 2)
|
||||
{
|
||||
float value = c.UshortToFloat(registers[1], registers[0]);
|
||||
Dispatcher.Invoke(() => control.Text = value.ToString(format) + unit);
|
||||
}
|
||||
else if (registers != null && registers.Length >= 1)
|
||||
{
|
||||
int value = registers[0];
|
||||
Dispatcher.Invoke(() => control.Text = value.ToString(format) + unit);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"读取地址{address}失败:{ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ReadAndUpdateIntAsync(int address, int length, System.Windows.Controls.Control control, string format)
|
||||
{
|
||||
try
|
||||
{
|
||||
ushort[] registers = await Task.Run(() =>
|
||||
_modbusMaster.ReadHoldingRegisters(1, (ushort)address, (ushort)length)
|
||||
);
|
||||
|
||||
if (registers != null && registers.Length >= 1)
|
||||
{
|
||||
int value = registers[0];
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
if (control is System.Windows.Controls.ContentControl contentControl)
|
||||
contentControl.Content = value.ToString(format);
|
||||
else if (control is System.Windows.Controls.TextBox textBox)
|
||||
textBox.Text = value.ToString(format);
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"读取地址{address}失败:{ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//写入
|
||||
private void fbspeed_GotFocus(object sender, RoutedEventArgs e)
|
||||
@@ -473,7 +446,6 @@ namespace 头罩视野.Views
|
||||
}
|
||||
|
||||
|
||||
|
||||
//错误信息提示
|
||||
private void ShowError(string msg) => MessageBox.Show(msg, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
private void GoHome(object s, RoutedEventArgs e) => NavigationService.Content = null;
|
||||
@@ -509,6 +481,46 @@ namespace 头罩视野.Views
|
||||
_cts = null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//读取灯泡的数据
|
||||
|
||||
/// <summary>
|
||||
/// 读取灯条PLC数据 → 自动存入 DataList
|
||||
/// 可直接放入 Task 列表等待
|
||||
/// </summary>
|
||||
private async Task ReadLightBarData()
|
||||
{
|
||||
// 无连接直接返回
|
||||
if (_modbusMaster == null || !ModbusHelper.TcpClient.Connected)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
// 读取灯条寄存器(地址350,长度15)
|
||||
ushort[] registers = await _modbusMaster.ReadHoldingRegistersAsync(1, 350, 15);
|
||||
|
||||
// 每个 ushort 是16位,低位在前
|
||||
foreach (ushort reg in registers)
|
||||
{
|
||||
for (int bit = 0; bit < 16; bit++)
|
||||
{
|
||||
// 取第bit位的值:0或1
|
||||
int lightBit = (reg & (1 << bit)) != 0 ? 1 : 0;
|
||||
DataList.Add(lightBit);
|
||||
}
|
||||
}
|
||||
|
||||
// 调试:打印转换后的数据长度
|
||||
System.Diagnostics.Debug.WriteLine($"灯条二进制数据总长度:{DataList.Count}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"灯条数据读取失败:{ex.Message}");
|
||||
DataList.Clear(); // 出错时清空数据
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -231,52 +231,52 @@ namespace 头罩视野.Views
|
||||
}
|
||||
|
||||
//面积的计算方法
|
||||
public void getAllData(List<dynamic> leftEyeDataList, List<dynamic> RightEyeDataList, int perAngle)
|
||||
//public void getAllData(List<dynamic> leftEyeDataList, List<dynamic> RightEyeDataList, int perAngle)
|
||||
|
||||
{
|
||||
//{
|
||||
|
||||
// 1. 先去除异常值,生成新列表(不修改原列表)
|
||||
var filteredLeft = GetArea.RemoveOutliers(leftEyeDataList);
|
||||
var filteredRight = GetArea.RemoveOutliers(RightEyeDataList);
|
||||
// // 1. 先去除异常值,生成新列表(不修改原列表)
|
||||
// var filteredLeft = GetArea.RemoveOutliers(leftEyeDataList);
|
||||
// var filteredRight = GetArea.RemoveOutliers(RightEyeDataList);
|
||||
|
||||
//左目视野面积
|
||||
GlobalData.LeftEyeArea = GetArea.CalculateEyeArea(filteredLeft);
|
||||
//右目视野面积
|
||||
GlobalData.RightEyeArea = GetArea.CalculateEyeArea(filteredRight);
|
||||
//双目视野面积
|
||||
GlobalData.BinocularArea = GetArea.CalcBinocularArea(filteredLeft, filteredRight);
|
||||
// //左目视野面积
|
||||
// GlobalData.LeftEyeArea = GetArea.CalculateEyeArea(filteredLeft);
|
||||
// //右目视野面积
|
||||
// GlobalData.RightEyeArea = GetArea.CalculateEyeArea(filteredRight);
|
||||
// //双目视野面积
|
||||
// GlobalData.BinocularArea = GetArea.CalcBinocularArea(filteredLeft, filteredRight);
|
||||
|
||||
//// 总视野面积
|
||||
GlobalData.TotalEyeArea = GlobalData.LeftEyeArea + GlobalData.RightEyeArea - GlobalData.BinocularArea;
|
||||
// //// 总视野面积
|
||||
// GlobalData.TotalEyeArea = GlobalData.LeftEyeArea + GlobalData.RightEyeArea - GlobalData.BinocularArea;
|
||||
|
||||
//// 空白视野面积
|
||||
GlobalData.BlankArea = GetArea.StandardTotal - GlobalData.TotalEyeArea;
|
||||
// //// 空白视野面积
|
||||
// GlobalData.BlankArea = GetArea.StandardTotal - GlobalData.TotalEyeArea;
|
||||
|
||||
//视野保存率
|
||||
// //视野保存率
|
||||
|
||||
// 左眼平均值数组
|
||||
double[] leftAvg = GetArea.GetEyeAvgArray(filteredLeft);
|
||||
// // 左眼平均值数组
|
||||
// double[] leftAvg = GetArea.GetEyeAvgArray(filteredLeft);
|
||||
|
||||
// 右眼平均值数组
|
||||
double[] rightAvg = GetArea.GetEyeAvgArray(RightEyeDataList);
|
||||
// // 右眼平均值数组
|
||||
// double[] rightAvg = GetArea.GetEyeAvgArray(RightEyeDataList);
|
||||
|
||||
double leftLowerAngle = GetArea.CalcLowerAngle(leftAvg, perAngle);
|
||||
double rightLowerAngle = GetArea.CalcLowerAngle(rightAvg, perAngle);
|
||||
//下方视野
|
||||
GlobalData.LowerVision = Math.Min(leftLowerAngle, rightLowerAngle);
|
||||
// double leftLowerAngle = GetArea.CalcLowerAngle(leftAvg, perAngle);
|
||||
// double rightLowerAngle = GetArea.CalcLowerAngle(rightAvg, perAngle);
|
||||
// //下方视野
|
||||
// GlobalData.LowerVision = Math.Min(leftLowerAngle, rightLowerAngle);
|
||||
|
||||
//视野保存率
|
||||
GlobalData.VisionRetentionRate = GetArea.CalcVisionRate(GlobalData.LeftEyeArea, GlobalData.RightEyeArea);
|
||||
// //视野保存率
|
||||
// GlobalData.VisionRetentionRate = GetArea.CalcVisionRate(GlobalData.LeftEyeArea, GlobalData.RightEyeArea);
|
||||
|
||||
//打印数值显示在系统上面
|
||||
System.Diagnostics.Debug.WriteLine("左目视野面积" + GlobalData.LeftEyeArea);
|
||||
System.Diagnostics.Debug.WriteLine("右目视野面积" + GlobalData.RightEyeArea);
|
||||
System.Diagnostics.Debug.WriteLine("双目视野面积" + GlobalData.BinocularArea);
|
||||
System.Diagnostics.Debug.WriteLine("总视野面积" + GlobalData.TotalEyeArea);
|
||||
System.Diagnostics.Debug.WriteLine("下方视野" + GlobalData.LowerVision);
|
||||
System.Diagnostics.Debug.WriteLine("视野保存率" + GlobalData.VisionRetentionRate);
|
||||
// //打印数值显示在系统上面
|
||||
// System.Diagnostics.Debug.WriteLine("左目视野面积" + GlobalData.LeftEyeArea);
|
||||
// System.Diagnostics.Debug.WriteLine("右目视野面积" + GlobalData.RightEyeArea);
|
||||
// System.Diagnostics.Debug.WriteLine("双目视野面积" + GlobalData.BinocularArea);
|
||||
// System.Diagnostics.Debug.WriteLine("总视野面积" + GlobalData.TotalEyeArea);
|
||||
// System.Diagnostics.Debug.WriteLine("下方视野" + GlobalData.LowerVision);
|
||||
// System.Diagnostics.Debug.WriteLine("视野保存率" + GlobalData.VisionRetentionRate);
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
|
||||
//#endregion
|
||||
|
||||
Reference in New Issue
Block a user