时针每小时旋转30°,分针每分钟旋转6°,秒针每秒钟旋转6°
假设12刻度是旋转起点,时针旋转了90°那么90/30=3,即当前时针指在3点
如果使用前者需要获得每一个指针所在的直线,与过钟表圆心的一条线
如果使用后者需要获得每一个指针上的一点,与钟表的原点
模板匹配到分别匹配三个指针
时针:
找圆工具用来获取钟表的圆心坐标,先用模板匹配匹配到钟表大致位置,再将坐标输入给找圆工具,告诉大致位置
画一条过圆心直线
图中黄色弧线即为测得角度
```csharp
```csharp
CogAnglePointPointTool app1 = mToolBlock.Tools["CogAnglePointPointTool1-时针"]as CogAnglePointPointTool;
CogAnglePointPointTool app2 = mToolBlock.Tools["CogAnglePointPointTool2-分针"]as CogAnglePointPointTool;
CogAnglePointPointTool app3 = mToolBlock.Tools["CogAnglePointPointTool3-秒针"]as CogAnglePointPointTool;
double angleh = app1.Angle;
double angle1 = CogMisc.RadToDeg(angleh);
double anglem = app2.Angle;
double angle2 = CogMisc.RadToDeg(anglem);
double angled = app3.Angle;
double angle3 = CogMisc.RadToDeg(angled);
//弧度转角度 CogMisc.RadToDeg()
//Math.PI
//double angle1 = angle * (180 / Math.PI);
//常量:值可以用但不可以改,每个字母都大写
int hour;
angle1=Math.Ceiling(angle1); //向上取整 Math.Ceiling()
int minute;
angle2 = Math.Ceiling(angle2); //向上取整
int second;
angle3 = Math.Ceiling(angle3); //向上取整
if(angle1 <= 180 && angle1 > 0)
{
hour = (int)(angle1 / 30) + 3;
}
else if(angle1<=0&&angle1>=-90)
{
hour = (int) (angle1 / 30) + 3;
if(hour == 0) hour = 12;
}
else
{
hour = (int) (angle1 / 30) + 3+12;
}//时针逻辑
if(angle2 <= 180 && angle2 >= -90)
{
minute = (int) (angle2 / 6) + 15;
}
else
{
minute = (int) (angle2 / 6) + 15 + 60;
}//分针逻辑
if(angle3 <= 180 && angle3 >=-90)
{
second = (int) (angle3 / 6) + 15;
}
else
{
second = (int) (angle3 / 6) + 15 + 60;
}//秒针逻辑
label.SetXYText(200,200,hour.ToString()+":"+minute.ToString()+":"+second.ToString());
label.Color = CogColorConstants.Black;
label.Font = new Font("楷体",30);
```csharp
CogAngleLineLineTool all1 = mToolBlock.Tools["CogAngleLineLineTool1-时针"] as CogAngleLineLineTool;
CogAngleLineLineTool all2 = mToolBlock.Tools["CogAngleLineLineTool2-分针"] as CogAngleLineLineTool;
CogAngleLineLineTool all3 = mToolBlock.Tools["CogAngleLineLineTool3-秒针"] as CogAngleLineLineTool;
double angle1 = all1.Angle*(180/Math.PI);
double angle2 = all2.Angle*(180/Math.PI);//弧度转角度
double angle3 = all3.Angle*(180/Math.PI);
label1.SetXYText(100,50,angle1.ToString("F0") +" "+ angle2.ToString("F0") +" "+ angle3.ToString("F0"));
if(angle1 < 0)
{
angle1 = angle1 + 360;
}
if(angle2 < 0)
{
angle2 = angle2 + 360;
}
if(angle3 < 0)
{
angle3 = angle3 + 360;
}
int hour = (int) (angle1 / 30) % 12;
if (hour == 0) hour = 12;
int minute =(int) (angle2 / 6) % 60;
int second =(int) (angle3 / 6) % 60;
label.SetXYText(200,150,hour.ToString()+":"+minute.ToString()+":"+second.ToString());
label2.SetXYText(100,100,angle1.ToString("F0")+" " + angle2.ToString("F0")+" " + angle3.ToString("F0"));
label.Font = new Font("楷体",50);
label.Color = CogColorConstants.Black;
label1.Font = new Font("楷体", 50);
label1.Color = CogColorConstants.Red;
label2.Font = new Font("楷体", 50);
label2.Color = CogColorConstants.Green;
角度 = 弧度*(180/Π)
ps:C# 中 Π是一个常量 用Math.PI表示
点点夹角更便利,线线夹角可以更改0点位置
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务