假日马上快要交了,不少恋人将出门旅游还是探亲访友。即使没有强迫症的卿,也许在锁门离开的霎时,心里也会泛起一丝淡淡的忧患:距离家这么长日子,如何才能够保证家里全有惊无险?

题意:有n个星球,每个星球有Ai个人,每次出一定量种选择,第一是由每个星球上掉1单人口,第二单挑选是选择一个星星放置一个科学家,将拖欠星球的食指加倍,问尽少小坏会用享有星球上之人头还要变为0,并且只要步数<=1000,还要输出操作顺序。

加上时内没有人,最紧要的威逼来自星星个:一个是小偷,另一个凡是火灾。防盗防火防闺蜜虽然是稳之主题,但所有术还是当外出以前做的,究竟效果怎么样?

解法:找来人最为多之异常星球,设尽酷人口为maxi,那么跑一个循环往复,每次该星球如果人<maxi,那么会加倍就加倍到离maxi最近之岗位,然后计算他们之异,比如2
1035,加倍后呢1024
1035,差啊11,那么到时刻1024减交11底时刻,1035化为了22,那么这个时马上加倍11,再减即可。每个不齐最可怜口之星星上还这样处理即可。predouble[]笔录处理前先要加倍到距最特别屡屡最近之职位的星斗,backdouble[]笔录减交差值的时刻如果加倍的星球。然后输出即可。

最好是能产生一个配备,在主人不在小时实时督查家里。一旦有题目,迅速通知主人,同时报警。

代码:

1.督查网

图片 1图片 2

1.1市面上之督查系统

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 100007

int a[N];
int backdouble[5003][2];
int predouble[5004];

int main()
{
    int n,i,j,maxi = 0,kb,kp,ans = 0,flag = 1;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        if(a[i] == 0)
            flag = 0;
        maxi = max(maxi,a[i]);
    }
    if(!flag)
    {
        puts("0");
        return 0;
    }
    kb = kp = 0;
    for(i=1;i<=n;i++)
    {
        if(a[i] == maxi)
            continue;
        int tmp = a[i];
        while(tmp < maxi)
        {
            if(maxi+ans <= 1000)  //还能输出
            {
                if(2*tmp<=maxi && kp <= 1000)
                    predouble[kp++] = i;
                else
                {
                    backdouble[kb][0] = i;
                    backdouble[kb++][1] = 2*(maxi-tmp);
                }
            }
            tmp *= 2;
            ans++;
        }
    }
    printf("%d\n",maxi+ans);
    if(ans+maxi > 1000)
        return 0;
    for(i=0;i<kp;i++)
        printf("science mission to the planet %d\n",predouble[i]);
    for(i=maxi;i>0;i--)
    {
        for(j=0;j<kb;j++)
            if(backdouble[j][1] == i)
                printf("science mission to the planet %d\n",backdouble[j][0]);
        puts("flying mission");
    }
    return 0;
}

本着这问题,网上发出很多成的督察体系。原理大概是:通过探测器监测家里的状,一旦发现异常时,报警器通过网络以报警音推送到主人的无绳电话机要微机。

View Code

探测器的种类主要发生些许种:

 

(1)红外探测器

尘世万物包括你、我还有小偷的身体,无时无刻都于通往外发射着红外线。

热线有个规律,就是温度更是强之体,向外发射的红外线强度进一步老。

因此,如果将红外线探测器装于派的方面或对面。当有梁上君子经过的时光,它就能够探测到红外线强度大增大,据此判断来小偷闯入。

(2)门磁探测器

门磁探测器由少数只有构成,一部分设置在派及,另一样组成部分设置于门框上。如果小偷打开了家,探测器的个别有些会让分手开,据此判断来梁上君子闯入。

这些报警器在大势所趋程度达能监控小偷与火灾,但其题材在:

(1)红外线传感器是利用人体温度与条件温度差值来判定的,因此对温度非常乖巧。想想在炎炎的夏日,空气的热度几乎都是30几渡过,已经生接近身体温度,这对红外线传感器而言是一个挑战。

(2)无论是红外线传感器还是门磁传感器,它们都装于稳住的职(门和窗对面或者旁边)。对于来进取心的有些偷而言,你觉得他们无会见网购这个、拆开仔细研究清楚啊?训练有素的稍偷能迅速找到这些监控设施,可能才需要花费几秒钟就拿警报声消除了。

用,我们要想别的艺术来化解这些题目。

1.2咱们的监控网

吓信息是:这总体还足以经Matlab编程来落实!而且不论是需采购方面的传感器,只需要以天桥上之摊档买只摄像头即可。

干活原理如下:程序通过调用摄像头,对门和窗自动定时拍照。每打一摆照片,就和前一模一样张相片对照,判断门窗是否受辟、家里是不是来阴闯入或火情。一旦探测有异常情况,立刻被主人发送报警邮件,并播放警报,赶走多少偷盗。

而您打一个针孔摄像头,藏到衣柜边上针对着门窗,那么就是教练有素的略微偷盗进来了,也无力回天迅速消除摄像头,警报声会一直频频。而且,摄像头对准温度并无灵动。

俺们把程序由个名给doggy,doggy实现监督的流程图如下:

设若想用Matlab编程实现地方这些功能,至少要解决下面几乎独难点:

(1)如何调用摄像头自动定时拍照?

(2)如何通过对照两摆像,判断女人是不是有阴闯入?

(3)判断有有贼之后,如何让主人发送报警邮件?

(4)如何自动播放警报?

(5)如果小偷对报警音向不care,是否来外方法?

脚一一说如何贯彻,没时间看规律的同桌,可以一直跨越到第6片段底下方式。

2.定时自动拍照

定时自动拍照由一个主程序doggy.m和一个拍照函数takephotos.m组成。

里面主程序doggy.m的代码为:

%清除所有变量

clear

clc

%建立图片存储文件夹

ifexist(‘doggyphoto’,’dir’)~= 7

mkdir([cd,’/doggyphoto’])

end

directory=[cd,’/doggyphoto/’];

%设置一个监控界面

hf =
figure(‘Units’,’Normalized’,’Menubar’,’None’,’NumberTitle’,’off’,’Name’,’监控系统’);

ha = axes(‘Parent’, hf,’Units’,’Normalized’,’Position’, [0.125 0.2 0.75
0.75]);

axisoff

axisequal

%设置两只按钮

hb1 = uicontrol(‘Parent’, hf,’Units’,’Normalized’,’Position’, [0.3 0.05
0.15 0.1],’String’,’测试照头’,’Callback’, [‘imaqhwinfo;’…

‘obj = videoinput(”winvideo”);’…

‘set(obj, ”FramesPerTrigger”, 1);’…

‘set(obj, ”TriggerRepeat”, Inf);’…

‘objRes = get(obj, ”VideoResolution”);’…

‘nBands = get(obj, ”NumberOfBands”);’…

‘hImage = image(zeros(objRes(2), objRes(1), nBands));’…

‘preview(obj, hImage);’]);

hb2 = uicontrol(‘Parent’, hf,’Units’,’Normalized’,’Position’, [0.6 0.05
0.15 0.1],’String’,’开始监控’,’Callback’,’takephotos(directory,obj);’);

这段先后分成四独组成部分:

首先部分:清除所有变量,避免任何变量影响监控体系的运作;

老二有:新建一个文件夹doggyphoto用于待会拍照存储照片,如果这文件夹已是就无须新建了。

其三组成部分:设置一个督查界面;

季有的:设置两独按钮,其中一个凡按钮是为此来测试摄像头的,另一个按钮则是起监控之。

当第四片段用调用一个函数takephotos,源程序是:

functiontakephotos(directory,obj)

escapetime=30;%从点击开始监控到锁门后去的日外,摄像头不监控,单位:秒

daynum=3;%一共打算出去几天?单位:天

timestep=2;%每隔多少秒拍一不良照片?单位:秒

photonum=round(daynum*24*3600/timestep);

i=0;

whilephotonum>0

whileescapetime>0

disp([‘The monitoring system will start to workin ‘num2str(escapetime)’
seconds, please leave quickly.’]);

escapetime=escapetime-1;

pause(1);

ifescapetime==0

disp([‘The monitoring system will start to worknow.’]);

end

end

photonum=photonum-1;

i=i+1;

filename=[num2str(i)];

frame = getsnapshot(obj);%抓图

imwrite(frame,[directory,filename,’.jpg’]);%存图

disp([‘Take the ‘num2str(i)’ photos.’]);

if(i>1 &&comparephotos(i,i-1)>0)

sentemail();

playalarm();

disp([‘Something wrong in the room!’]);

end

pause(timestep);

end

cleari;%脱局部变量

delete(obj);%关闭摄像头

在这个函数中而安装几单参数:

(1)从主人点击“开始监控”的按钮,到锁门后离这段日子内,摄像头应该不监控。否则,监控程序将主人呢视作小偷了……这段时间可长可短,取决于每个人动作快慢。这里doggy默认给了主人30秒钟,需要再行增长日子只是手动修改。

escapetime=30;%从点击开始监控到锁门后距的时光外,摄像头不监控,单位:秒

(2)主人打算一起下多少天?doggy需要以马上段时日内工作,默认是3上,同样的只是手动修改是参数。

daynum=3;%一共打算出去几上?单位:天

(3)每隔多少秒拍一破?如果打的卓绝勤,照片占用的硬盘空间可能很深,硬盘会被爆掉的。而设简单不好摄影中间隔时间太久,小盗进来将家又关好了,两不行照片一摸一样,监控程序无法看清异常情况。默认是2秒,可手动修改。

timestep=2;%每隔多少秒拍一次等照片?单位:秒

经Matlab内置函数getsnapshot函数拍照,然后通过嵌入函数imwrite函数存储,之后调用comparephotos函数判断是否有人闯入或是否来火灾,如果判断发生好状态,通过sentemail函数给主人犯邮件,并且经过playalarm播放警报。

3.判断是否有人闯入或火灾

这项功能是经过comparephotos.m完成的,源代码如下:

functiontheif=comparephotos(i,j)

name1=[num2str(i)’.jpg’];

name2=[num2str(j)’.jpg’];

img1=imread(name1,’jpg’);

img2=imread(name2,’jpg’);

diffvalue=mean(mean(mean(abs(double(img1)-double(img2)))))%计算两布置图的差值

Threshold=5;%设置报警的阈值

ifdiffvalue>Threshold%要是少摆放图片出入过很,认为有贼闯入或出火灾

theif=1;

else

theif=0;

end

其一函数首先调用内置函数imread读取两摆图纸,然后继续对比。

在Matlab中,照片是为数组的花样储存的。因此,通过对照两个数组的差值就能够判断两摆放图纸的分。

好端端状态下,摄像头拍之蝇头张类似的图片应该是千差万别不坏;如果差值过非常,则印证有格外动静。

测试结果如下:

(1)正常情形下

第2秒的图纸:

第4秒的图纸:

鉴于没有人闯入,也从没火情,两摆图应该是相同模一样的。

区区单数组相减之后,差值为0。如果将这差值的数组再显示,应该同样摆全黑的影:

(2)如果第二摆放相片遭推广了一个异物(记事本,请忽略自己的玉手…)

第2秒的相片:

第4秒的照:

片独数组相减之后,没有异物的地方差值为0,有异物的地方不同值未为0,所以差值的数组再显示就是如此的:

关押,没有异物的地方是全黑的,有异物的地方就为检测出了。

(3)由于同样龙内不同随时,室外的光明并无均等,所以前后两摆放照片并无是全然同模子一样,即相互减后的数组再显示不是全黑的,而是类似被全黑的起得噪音的图纸:

就此这里需要发出只参数,来调控报警的阈值。

Threshold=5;%设置报警的阈值

这个参数反映了左右两摆放图片的异样程度。

假定Threshold设置为0,那么只要简单张图纸有一致丝不同,doggy就见面立刻报警,真正得以实现并一但蚊子、一但跳蚤都无让飞进来。

不过实质上,我们并不需要doggy这么快。否则,由于室外的光辉的不同而致使前后两张照片并无是全然同模一样,也会见招误报警。

这参数与见仁见智房子的窗子大小、位置相关。一般而言,通过测试后发现安装Threshold为5,可以好好的过滤掉误报警。

4.发送邮件

咱俩无愿意外出时,家里发生其它情形有,但如若产生情,让doggy给咱们立即发一样查封邮件,源代码文件称sentemail.m,代码如下:

functionsentemail()

mail =’xxxxxxxxx@qq.com’;%得以行使qq邮箱

password =’xxxxxx’;%输入邮箱的密码

setpref(‘Internet’,’E_mail’,mail);

setpref(‘Internet’,’SMTP_Server’,’smtp.qq.com’);%此处邮箱服务器和地方一样

setpref(‘Internet’,’SMTP_Username’,mail);

setpref(‘Internet’,’SMTP_Password’,password);

props = java.lang.System.getProperties;

props.setProperty(‘mail.smtp.auth’,’true’);

props.setProperty(‘mail.smtp.socketFactory.class’,’javax.net.ssl.SSLSocketFactory’);

props.setProperty(‘mail.smtp.socketFactory.port’,’465′);

subject=’Alarm’;%邮件标题

content=’Dear Master, there is something wrong in our house!’;%邮件内容

sendmail(‘xxxxxxxxx@qq.com’,subject,content);%需要发送至之邮箱地址

当当时同块用留意的是:

(1)密码要运用明码,很坑爹是匪是?别忘了上个月咱们说罢得为此pcode给程序加密。

(2)
Matlab可以于邮件中发送附件。然而,它发送邮件是透过Java接口,速度较缓慢,所以不推荐添加太好之附件,以免发送失败。这里为确保起见,干脆不作附件好了。

(3)
Matlab只能发送不欲authentication的邮箱地址,如果采用出现谬误,请将POP3后者SMTP服务打开。以qq邮箱为条例,需要以安中打开如下权限:

5.自动播放警报

通知了主人后,接下去就是是欠发出声音赶走小偷了,函数文件称是playalarm.m,源代码如下:

functionplayalarm()

[y,fs]=wavread(‘Alarm.wav’);%保证wav文件在当前工作目录

sound(y, fs);

(1)警报声

绝常用之声响是警车的音响。

报警器的响声会受有来贼心没贼胆的人数退散,而且能够唤起广泛邻居注意。

(2)恐怖片

对此等级比大之多少偷而言,这种报警声响或早都让免疫了。

这时不使换成恐怖片的声响,比警车的音响又发出效果。

雅提醒:此恐怖片声音很惊悚,切勿在半夜三更一个人口接触开。

1:24惊悚声音,慎入发源科学计算编点程

对盗贼而言,其实是待好强之心理素质的。

愈是前进屋的先头几秒种,是绝忐忑与防卫状态最好充分的早晚。

他会见细心检查看有没发出事态,一旦发觉此屋子里没有威胁,他会晤略放松一点。

据此马上段惊悚的声音,最前7秒没动静,是以给盗贼充分的时放松。

对等客初步放松的当儿,再骤然听到惊悚的响动才会及极端好的效果。

(3)声音飘忽的感觉到

光播放恐怖片的乐,也许对勇的匪徒来说根本无视,甚至不得不当作他们饭后的小费。

这就是说咱们虽加点立体效果,即声音飘忽不定的感到。

规律是如此的:人得判明声源的职,是坐声源到片只耳朵的偏离一般不同,声音传至少独耳朵的随时、强弱与任何特色呢就算不同。

那,如果我们透过左声道和右声道放出来的恐怖片声音强度要时刻不等同,盗贼就是会见感觉到恐怖声的出位置是当飘忽不定的,更兼具惊悚效果。

下,我们转移简单单声道音响的强度:

functionplayalarm2()

[y,fs]=wavread(‘kb.wav’);

left=y(:,1);%左声道

right=y(:,2);%右声道

x=1:length(left);

y(:,1)=left.*sin(2*pi().*x/length(left)*5)’;

y(:,2)=left.*(1-sin(2*pi().*x/length(left)*5))’;

wavwrite(y,fs,’kb2′);

比起上面的充分,能明了感觉到到这次声源在左右动。(每首推送只能插入一段音频,所以就段飘忽的板无法插入,需要试听的受后台留言)

而,这个声音还单纯当匪之正前方,能不能够出主意吃匪认为声源在左右光景运动,甚至逾越到外暗为?

答案当然是足以的了哪!当半独波形具有180°相位差且分别放在两个声道时,只要简单单声道不吃融合在一起,我们得以显著感觉到声源跑至背后去了。

而是限于时间以及字数,这里无法继续展开讨论,下次寻找机会专门做只Matlab处理立体声的专题吧。

(4)增加次声波

惟有恐怖片声音的振奋,也许要不能够全控制住盗贼的唯利是图。

能否让听到立体声恐怖片的盗,除了当思维及无舒适之外,身体也时有发生不痛快的发吗?

连着下去,隆重推出另一个很杀器——次声波。

啊是坏声波?人耳朵会听到的声音的频率是20到2万赫兹。频率低于20赫兹的声波叫做次声波。

少数频率的次声波由于和人体器官的颠簸频率近乎甚至同一,容易和人体器官产生震动,对人体产生格外强之伤害性,危险时不过与人口死。

当,通过matlab程序生成的次声波,经过音响播放出来其实功率很粗,并不足以伤害及盗贼。但是起码会给匪感觉到发硌未痛快。

再要紧的凡,这个声音盗贼是任不顶的。

也就是说,站在匪的角度,他一筹莫展听到声响,只能感受及难受。再配上恐怖片的惊悚的立体音效,效果上了。

生成次声波的源代码如下:

functioncreateisound()

f=10;%频率10赫兹

w=2*pi()*f;

t=[0:0.0001:30];%步进0.0001秒

y=sin(w*t);

如此这般,就落了一个效率也10赫兹,时间也30秒的次声波。

(5)高分贝DJ

要盗贼油盐不进,对警车声和恐怖片声音还免疫。

咱还有最后一导致,但也是无比无艺术之道:把音量调到极致酷,播放下面高分贝DJ,把邻居曹还吵醒吧。

她们见面火冲冲找你算账,然后以无形中中拿小偷逼走。

6.使用方法

吓了,原理与摆明白,下面说如何行使是监控系统。

6.1多建筑监督体系

(1)材料准备

资料只需要:

平高装有Matlab的微机

一个摄像头

一个声音(最好有逊色音炮,效果又精彩)

拿电脑、摄像头及声音都藏在隐藏的岗位。音响最好对称的厕房间的点滴独角落。

(2)参数设置

以享有代码拷到电脑上,一共有六只公文:

doggy.m,

takephotos.m,

comparephotos.m,

sentemail.m,

playalarm.m,

playalarm2.m,

每个文件对应的意义见下图:

经过doggy.m调用takephotos.m进行拍照,然后调用comparephotos.m判断是否有人闯入或是否发火灾,如果判断发生那个情况,通过sentemail.m函数给主人犯邮件,并且通过playalarm.m和playalarm2.m播警报。

消安装的参数有:

(1)
takephotos.m中escapetime参数:从主人点击“开始监控”的按钮,到锁门后距就段日子内,摄像头应该无监控。

(2) takephotos.m中daynum参数:主人打算一起下多少天?

(3) takephotos.m中timestep=2参数:每隔多少秒拍一涂鸦?

(4) comparephotos.m中Threshold=5:设置报警的阈值。

(3)开始监控

参数设置好之后,在主程序里运行doggy回车,弹出如下界面:

接触左下方的“测试摄像头”,看摄像头是否正规干活。

下一场点右侧下方的“开始监控”之后,程序开始倒计时:

持有者在斯时内,离开锁门准备去外边度假咯。

连接下去,是先后各隔几秒钟给门和窗照相,

接下来对比前后两张像判断是否有人闯入。

6.2盗的感受

我们希望报警程序永远不要为激活。但是一旦被激活,它是如此防御盗贼的:

先是,盗贼进了派,开始判断女人是不是生报警器或者其它威胁什么的。

待了几秒钟,发现没什么不投缘,开始备搜东西。

刚于他准备开搜的上,天上传来一道惊悚的音。

冷清了几乎秒,他迅即识别这是房的主人在播放恐怖片呢,心里想:小样,给本人耍就套。

而是连接下,他又惊又喜的发现这个惊悚的声开始飘忽移动,慢慢挪动到他偷。

这会儿,他早就萌芽了退意。

重复连下,次声波开始放,他觉得到除了心里不舒服之外,身体为来头不顶舒服。

终了吧,放弃吧。大部分盗贼决定放弃了。

但是,还有少部分土匪是盗墓出身,根本未care。

好吧,这个时候开始广播超大音量DJ。

邻居曹,请你们赶快气冲冲到自房子里吧!赶走盗贼就是靠你们了。

人情,请提醒我本非是于写恶搞的脚本,而是以认真严肃的描绘推送。

7.形容于末

7.1改进方案

实质上是次还有许多地方可以改进,比如:

(1)自动定时拍摄之影的分辨率其实可以调的重新胜有,这样可另行确切之拓判定是否有人闯入。

(2)报警或恐怖片的立体声还足以举行的重逼真,当然就使考虑到横零星只声道音响之延期以及相位差。

(3)可以调用多个摄像头,从周密对门进行防卫。

7.2防盗意识

相比叫在家设置监督体系,更要之是平日只要增强安全意识。

遵当外面就餐时财别外漏,在公共场合聊天时别说好小出微微家财。

就算贼偷,就怕贼想。监控网永远只是守卫的终极一环绕。

纵使比如足球比赛一样,监控体系就是接近门员而已。足球绝好控制以前场队员手里,才能够远离失败。如果尽是受好之足球近门员抵御对方的开路先锋,不鸣金收兵的扑球,迟早是会见被进球。

(END)