2014年TI杯大学生电子设计竞赛题 B题:金属物体探测定位器(本科) 求思路

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2014年TI杯大学生电子设计竞赛题 B题:金属物体探测定位器(本科) 求思路相关的知识,希望对你有一定的参考价值。

1. 任务
设计并制作一个可自主移动的金属物体探测定位器(以下简称探测器),可探测置于玻璃板下的金属物体并给出定位指示。该探测器需采用TI公司LDC1000电感/数字转换器评估板(AY-LDC1000)作为金属物体探头,探头上应有定位指针,以给出明显定位指示。探头可在水平放置的玻璃板上移动。用直径Φ2(mm)的铁丝围成约50cm×50cm的正方形闭合框作为探测区边界置于玻璃板下,示意图见图1。

2. 要求
(1) 在探测区域内某处(距探测边界≥5cm)玻璃下放置一枚直径约19mm的镀镍钢芯1角硬币(第五套人民币的1角硬币)。探头能从“探头进入区”一侧任意指定位置和方向自行进入探测区(铁丝框包围区域)。通过探测,定位指针应指在硬币边沿之内,探测定位速度越快越好,且探测定位总时间应不超过2分钟。完成定位时给出声-光指示,此后探头不得再移动。(30分)
(2) 将1角硬币更换成直径约25mm的镀镍钢芯1元硬币(第五套人民币1元硬币),重复要求(1)的探测过程。定位完成后,定位指针与硬币圆心之间的定位误差应控制在5mm以;探测定位速度越快越好,探测定位总时间不应超过2分钟。完成定位时给出声-光指示,此后探头不得再移动。(30分)
(3) 将硬币改为自制圆铁环(用Φ2铁丝绕制),铁环外直径4cm。重复要求(1)的探测过程,应使定位指针尽可能指向铁环圆心,定位误差应控制在5mm以内;完成定位时给出声-光指示,此后探头不得再移动,探测定位总时间应不超过3分钟。(30分)
(4) 其他自主发挥功能。(10分)
(5) 设计报告。(20分)
项 目 主要内容 分数
系统方案 系统结构、方案比较与选择 4
理论分析与计算 探测器组成方案与工作原理分析、检测与控制算法 6
电路与程序设计 电路设计,程序结构与设计 5
测试方案与测试结果 测试结果及分析 3
设计报告结构及规范性 摘要,设计报告正文的结构,公式、图表的规范性 2
总分 20

3. 说明
(1) 金属物体探测定位装置探头采用AY-LDC1000板(由TI公司提供),可直接用AY-LDC1000板上的覆铜线圈,也可自制线圈;不得安装其他传感与摄像装置。探测开始后,不得手动或遥控探测器。
(2) 玻璃板可采用普通无色玻璃(玻璃边沿需贴上胶带以防划伤),也可用无色透明有机玻璃板;玻璃板长宽尺寸应大于50cm、厚度约3mm。
(3) 探头从“探头进入区”一侧进入时探头的起始位置和摆放方向,以及探测区域内的被测金属物体摆放位置均由测试专家在现场指定。

单片机采集控制即可,不复杂的!! 参考技术A 自制40X0.5cm线圈,机械手刷屏!追问

???什么意思

Hnoi2004 金属包裹

传送门

三维凸包模板题……只是听了听计算几何的课之后心血来潮想写的……

我的做法很无脑是吧……暴力枚举三个点组成的三角形,然后枚举剩下的点,判断其余点是否都在这个三角形的同一侧,是的话则说明这个三角形是凸包的一个面。

理论复杂度应该是$O(n^4)$,不过看上去跑得飞快?人帅自带小常数哈哈

这个故事告诉我们:大力出奇迹……

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<iostream>
 6 #include<fstream>
 7 #include<iomanip>
 8 using namespace std;
 9 const int maxn=110;
10 const long double eps=1e-15;
11 struct Point{
12     long double x,y,z;
13     Point(long double x=0.0,long double y=0.0,long double z=0.0):x(x),y(y),z(z){}
14     Point operator-(const Point &a)const{return Point(a.x-x,a.y-y,a.z-z);}//A - B = B到A的位移
15     Point operator/(const long double &a)const{return Point(x/a,y/a,z/a);}
16 }a[maxn];
17 typedef Point Vector;
18 long double noise();
19 long double Dot(const Vector&,const Vector&);
20 Vector Cross(const Vector&,const Vector&);
21 long double Length(const Vector&);
22 long double Area2(const Point&,const Point&,const Point&);
23 Vector LawVector(const Vector&,const Vector&);
24 long double Distance(const Point&,const Point&,const Vector&);
25 ifstream fin("enwrap.in");
26 ofstream fout("enwrap.out");
27 long double ans=0.0;
28 int n,t;
29 int main(){
30     fin>>n;
31     for(int i=1;i<=n;i++){
32         fin>>a[i].x>>a[i].y>>a[i].z;
33         a[i].x+=noise();
34         a[i].y+=noise();
35         a[i].z+=noise();
36     }
37     Vector A;
38     long double d;
39     bool bad;
40     for(int i=1;i<=n;i++)for(int j=1;j<i;j++)for(int k=1;k<j;k++){
41         bad=false;
42         t=0;
43         A=LawVector(a[j]-a[i],a[k]-a[i]);
44         for(int l=1;l<=n;l++)if(i!=l&&j!=l&&k!=l){
45             d=Distance(a[l],a[i],A);
46             if(!t)t=(d<0?-1:1);
47             else if(t*d<0){
48                 bad=true;
49                 break;
50             }
51         }
52         if(!bad)ans+=Area2(a[i],a[j],a[k]);
53     }
54     ans/=2.0;
55     fout<<fixed<<ans;
56     return 0;
57 }
58 long double noise(){
59     static int a=1213,b=678424137,p=998244353,x=753497501;
60     x=a*x+b;x%=p;
61     if(x<0)x+=p;
62     return (long double)(x-p)/p*5e-10;
63 }
64 inline long double Dot(const Vector &A,const Vector &B){return A.x*B.x+A.y*B.y+A.z*B.z;}
65 inline Vector Cross(const Vector &A,const Vector &B){return Vector(A.y*B.z-B.y*A.z,A.z*B.x-B.z*A.x,A.x*B.y-B.x*A.y);}
66 inline long double Length(const Vector &A){return sqrt(Dot(A,A));}
67 inline long double Area2(const Point &A,const Point &B,const Point &C){return Length(Cross(B-A,C-A));}
68 inline Vector LawVector(const Vector &A,const Vector &B){
69     Vector n=Cross(A,B);
70     return n/Length(n);
71 }//两个向量的叉积一定同时垂直于这两个向量
72 inline long double Distance(const Point &A,const Point &P,const Vector &n){return Dot(A-P,n);}//(P,n)是平面的点法式,n是单位向量
73 /*
74 三维凸包——暴力法
75 暴力枚举三个点组成的三角形,
76 判断其他点是否都在这个三角形的同侧,
77 是则说明这个三角形一定是凸包的一个面。
78 */
View Code

话说一开始忘了怎么求平面的法向量,手推了个公式然后发现搞出NaN了……因为我推的公式默认法向量在z维的长度不为0,但其实有很多平面的法向量是垂直于z轴的,然后就除零爆炸了……又脑补了很久,后来才想起来两个向量的叉积必定同时垂直于这两个向量……这人没救了

还有一件事,这题卡精度,随机扰乱搞得太大会炸精度……计算几何毁我青春

以上是关于2014年TI杯大学生电子设计竞赛题 B题:金属物体探测定位器(本科) 求思路的主要内容,如果未能解决你的问题,请参考以下文章

2018年TI杯大学生电子设计竞赛

2018年TI杯大学生电子设计竞赛

B题:灭火飞行器(本科)-- 2018年TI杯大学生电子设计竞赛

B题:灭火飞行器(本科)-- 2018年TI杯大学生电子设计竞赛

单相在线式不间断电源(B 题)--2020 年TI 杯大学生电子设计竞赛

单相在线式不间断电源(B 题)--2020 年TI 杯大学生电子设计竞赛