test
This commit is contained in:
@@ -164,8 +164,9 @@ namespace 头罩视野.Services
|
|||||||
public static (double cx, double cy, double a, double b, double area) FitEllipse(List<Point> points)
|
public static (double cx, double cy, double a, double b, double area) FitEllipse(List<Point> points)
|
||||||
{
|
{
|
||||||
int n = points.Count;
|
int n = points.Count;
|
||||||
if (n < 5)
|
if (n < 5)
|
||||||
throw new Exception("至少需要5个点来拟合椭圆");
|
//throw new Exception("至少需要5个点来拟合椭圆");
|
||||||
|
return new (0,0,0,0,0) ;
|
||||||
|
|
||||||
// 这里是正确写法
|
// 这里是正确写法
|
||||||
var M = MathNetMatrix.Build.Dense(n, 5);
|
var M = MathNetMatrix.Build.Dense(n, 5);
|
||||||
|
|||||||
@@ -38,10 +38,15 @@ namespace 头罩视野.Views
|
|||||||
// 保存上一条数据(用于去重)
|
// 保存上一条数据(用于去重)
|
||||||
private TestDataStore.TestRecord? _lastRecord;
|
private TestDataStore.TestRecord? _lastRecord;
|
||||||
|
|
||||||
|
#region 当前角度
|
||||||
|
private double currentAngle;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
private double _leftTotalArea = 0; // 左目总视野面积
|
private double _leftTotalArea = 0; // 左目总视野面积
|
||||||
private double _rightTotalArea = 0; // 右目总视野面积
|
private double _rightTotalArea = 0; // 右目总视野面积
|
||||||
private double _binocularTotalArea = 0; // 双目总视野面积
|
private double _binocularTotalArea = 0; // 双目总视野面积
|
||||||
|
double maxBottomViewAngle = 0; //记录所有姿态里的最大下方视野
|
||||||
|
|
||||||
// 表跟数据存储列表
|
// 表跟数据存储列表
|
||||||
public List<dynamic> DataList = new List<dynamic>();
|
public List<dynamic> DataList = new List<dynamic>();
|
||||||
@@ -210,6 +215,8 @@ namespace 头罩视野.Views
|
|||||||
private async void Button_Click_Test(object sender, RoutedEventArgs e)
|
private async void Button_Click_Test(object sender, RoutedEventArgs e)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
ma.BtnClickFunction(Function.ButtonType.复归型, 100);
|
ma.BtnClickFunction(Function.ButtonType.复归型, 100);
|
||||||
ButtonTest.Content = "测试中....";
|
ButtonTest.Content = "测试中....";
|
||||||
testTimer.Start();
|
testTimer.Start();
|
||||||
@@ -228,25 +235,26 @@ namespace 头罩视野.Views
|
|||||||
stepAngle = val; // 正常就用输入值
|
stepAngle = val; // 正常就用输入值
|
||||||
}
|
}
|
||||||
// 1. 读取输入框
|
// 1. 读取输入框
|
||||||
// 分辨角度 例:10
|
// 分辨角度 例:10
|
||||||
|
|
||||||
bool isLeftOnly = btnLeft.Content.ToString() == "左眼开" && btnRight.Content.ToString() == "右眼关";
|
bool isLeftOnly = btnLeft.Content.ToString() == "左眼开" && btnRight.Content.ToString() == "右眼关";
|
||||||
bool isRightOnly = btnRight.Content.ToString() == "右眼开" && btnLeft.Content.ToString() == "左眼关";
|
bool isRightOnly = btnRight.Content.ToString() == "右眼开" && btnLeft.Content.ToString() == "左眼关";
|
||||||
bool isBinocular = btnLeft.Content.ToString() == "左眼开" && btnRight.Content.ToString() == "右眼开";
|
bool isBinocular = btnLeft.Content.ToString() == "左眼开" && btnRight.Content.ToString() == "右眼开";
|
||||||
if (isLeftOnly)
|
if (isLeftOnly)
|
||||||
{ _leftTotalArea = 0;
|
{
|
||||||
}
|
_leftTotalArea = 0;
|
||||||
|
}
|
||||||
else if (isRightOnly)
|
else if (isRightOnly)
|
||||||
{
|
{
|
||||||
_rightTotalArea = 0;
|
_rightTotalArea = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (isBinocular)
|
else if (isBinocular)
|
||||||
{
|
{
|
||||||
_binocularTotalArea = 0;
|
_binocularTotalArea = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
double maxBottomViewAngle = 0; ;//记录所有姿态里的最大下方视野
|
|
||||||
// 2. 从0转到180,每 stepAngle 执行一次
|
// 2. 从0转到180,每 stepAngle 执行一次
|
||||||
for (double current = stepAngle; current <= 180; current += stepAngle)
|
for (double current = stepAngle; current <= 180; current += stepAngle)
|
||||||
{
|
{
|
||||||
@@ -261,18 +269,18 @@ namespace 头罩视野.Views
|
|||||||
|
|
||||||
if (isLeftOnly)
|
if (isLeftOnly)
|
||||||
{
|
{
|
||||||
_leftTotalArea += singleArea;
|
_leftTotalArea += singleArea;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (isRightOnly)
|
else if (isRightOnly)
|
||||||
{
|
{
|
||||||
_rightTotalArea += singleArea;
|
_rightTotalArea += singleArea;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (isBinocular)
|
else if (isBinocular)
|
||||||
{
|
{
|
||||||
_binocularTotalArea += singleArea;
|
_binocularTotalArea += singleArea;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 单次计算下方视野角度
|
// 单次计算下方视野角度
|
||||||
@@ -283,26 +291,22 @@ namespace 头罩视野.Views
|
|||||||
{
|
{
|
||||||
maxBottomViewAngle = bottomViewAngle;
|
maxBottomViewAngle = bottomViewAngle;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果你要取最小值,用下面这段
|
// 如果你要取最小值,用下面这段
|
||||||
// if (bottomViewAngle < minBottomViewAngle && bottomViewAngle > 0)
|
// if (bottomViewAngle < minBottomViewAngle && bottomViewAngle > 0)
|
||||||
// {
|
// {
|
||||||
// minBottomViewAngle = bottomViewAngle;
|
// minBottomViewAngle = bottomViewAngle;
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
isFinished = _modbusMaster.ReadCoils(1, 102, 1)[0];
|
|
||||||
if (isFinished)
|
|
||||||
{
|
|
||||||
Button_Click_Stop(null, null);
|
|
||||||
UpdateVisionResults( maxBottomViewAngle);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//页面渲染值
|
//页面渲染值
|
||||||
|
|
||||||
public void UpdateVisionResults( double BotViAn)
|
public void UpdateVisionResults(double BotViAn)
|
||||||
{
|
{
|
||||||
zmsyarea.Text = _leftTotalArea.ToString("0.00"); // 左目
|
zmsyarea.Text = _leftTotalArea.ToString("0.00"); // 左目
|
||||||
ymsyarea.Text = _rightTotalArea.ToString("0.00"); // 右目
|
ymsyarea.Text = _rightTotalArea.ToString("0.00"); // 右目
|
||||||
smsyarea.Text = _binocularTotalArea.ToString("0.00"); // 双目
|
smsyarea.Text = _binocularTotalArea.ToString("0.00"); // 双目
|
||||||
|
|
||||||
// 3. 计算空白区视野面积(双目时才有效)
|
// 3. 计算空白区视野面积(双目时才有效)
|
||||||
if (double.TryParse(smsyarea.Text, out double binocularTotalArea))
|
if (double.TryParse(smsyarea.Text, out double binocularTotalArea))
|
||||||
@@ -360,7 +364,7 @@ namespace 头罩视野.Views
|
|||||||
private async void Timer_Tick(object sender, EventArgs e)
|
private async void Timer_Tick(object sender, EventArgs e)
|
||||||
|
|
||||||
{
|
{
|
||||||
System.Diagnostics.Debug.WriteLine("定时器触发了!" + DateTime.Now);
|
//System.Diagnostics.Debug.WriteLine("定时器触发了!" + DateTime.Now);
|
||||||
// 调用你原来的读取方
|
// 调用你原来的读取方
|
||||||
//await ReadAddr262DataAsync();
|
//await ReadAddr262DataAsync();
|
||||||
|
|
||||||
@@ -470,9 +474,19 @@ namespace 头罩视野.Views
|
|||||||
//ReadAndUpdateFloatAsync(430 ,2, sybhl, "F2", " "),
|
//ReadAndUpdateFloatAsync(430 ,2, sybhl, "F2", " "),
|
||||||
|
|
||||||
//前1从站地址,后1是长度
|
//前1从站地址,后1是长度
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
isFinished = _modbusMaster.ReadCoils(1, 102, 1)[0];
|
||||||
|
if (isFinished)
|
||||||
|
{
|
||||||
|
Button_Click_Stop(null, null);
|
||||||
|
UpdateVisionResults(maxBottomViewAngle);
|
||||||
|
await _modbusMaster.WriteSingleCoilAsync(1, 102, false);
|
||||||
|
isFinished = false;
|
||||||
|
System.Diagnostics.Debug.WriteLine("start11111");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
}
|
}
|
||||||
@@ -529,7 +543,7 @@ namespace 头罩视野.Views
|
|||||||
//float value4 = c.UshortToFloat(registers[7], registers[6]);
|
//float value4 = c.UshortToFloat(registers[7], registers[6]);
|
||||||
//float value5 = c.UshortToFloat(registers[9], registers[8]);
|
//float value5 = c.UshortToFloat(registers[9], registers[8]);
|
||||||
//float value6 = c.UshortToFloat(registers[11], registers[10]);
|
//float value6 = c.UshortToFloat(registers[11], registers[10]);
|
||||||
|
currentAngle = value2;
|
||||||
|
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
|
|
||||||
@@ -612,7 +626,7 @@ namespace 头罩视野.Views
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user