GJK计算碰撞代码的应用//-----------------------------------------------------------------------------//Torque3D//Copyright(C)GarageGames.com,Inc.////Thecorealgorithmsinthisfilearebasedoncodewritten//byG.vandenBergenforhisinterferencedetectionlibrary,//"SOLID2.0"//-----------------------------------------------------------------------------#include"core/dataChunker.h"#include"collision/collision.h"#include"sceneGraph/sceneObject.h"#include"collision/convex.h"#include"collision/gjk.h"//----------------------------------------------------------------------------staticF32rel_error=1E-5f;//relativeerrorinthecomputeddistancestaticF32sTolerance=1E-3f;//DistancetolerancestaticF32sEpsilon2=1E-20f;//ZerolengthvectorstaticU32sIteration=15;//Stuckinaloop?S32num_iterations=0;S32num_irregularities=0;//----------------------------------------------------------------------------GjkCollisionState::GjkCollisionState(){a=b=0;}GjkCollisionState::~GjkCollisionState(){}//----------------------------------------------------------------------------voidGjkCollisionState::swap(){Convex*t=a;a=b;b=t;CollisionStateList*l=mLista;mLista=mListb;mListb=l;v.neg();}//----------------------------------------------------------------------------voidGjkCollisionState::compute_det(){//Dotnewpointwithcurrentsetfor(inti=0,bit=1;i0)returnfalse;}}returntrue;}//----------------------------------------------------------------------------inlineboolGjkCollisionState::closest(VectorF&v){compute_det();for(ints=bits;s;--s){if((s&bits)==s){if(valid(s|last_bit)){ bits=s|last_bit;if(bits!=15) compute_vector(bits,v); returntrue;}}}if(valid(last_bit)){bits=last_bit;v=y[last];returntrue;}returnfalse;}//----------------------------------------------------------------------------inlineboolGjkCollisionState::degenerate(constVectorF&w){for(inti=0,bit=1;imState=this;mListb=CollisionStateList::alloc();mListb->mState=this;}//----------------------------------------------------------------------------voidGjkCollisionState::reset(constMatrixF&a2w,constMatrixF&b2w){VectorFzero(0,0,0),sa,sb;a2w.mulP(a->support(zero),&sa);b2w.mulP(b->support(zero),&sb);v=sa-sb;dist=v.len();}//----------------------------------------------------------------------------voidGjkCollisionState::getCollisionInfo(constMatrixF&mat,Collision*info){AssertFatal(false,"GjkCollisionState::getCollisionInfo()-Thereremainscalingproblemshere.");//ThisassumesthattheshapesdonotintersectPoint3Fpa,pb;if(bits){getClosestPoints(pa,pb);mat.mulP(pa,&info->point);b->getTransform().mulP(pb,&pa);info->normal=info->point-pa;}else{mat.mulP(p[last],&info->point);info->normal=v;}info->normal.normalize();info->object=b->getObject();}voidGjkCollisionState::getClosestPoints(Point3F&p1,Point3F&p2){F32sum=0;p1.set(0,0,0);p2.set(0,0,0);for(inti=0,bit=1;isupport(va);a2w.mulP(p[last],&sa);VectorFvb,sb;w2b.mulV(v,&vb);q[last]=b->support(vb);b2w.mulP(q[last],&sb);VectorFw=sa-sb;if(mDot(v,w)>0)returnfalse;if(degenerate(w)){++num_irregularities;returnfalse;}y[last]=w;all_bits=bits|last_bit;++num_iterations;if(!closest(v)||num_iterations>sIteration){++num_irregularities;returnfalse;}}while(bitssEpsilon2);returntrue;}F32GjkCollisionState::distance(constMatrixF&a2w,constMatrixF&b2w,constF32dontCareDist,constMatrixF*_w2a,constMatrixF*_w2b){num_iterations=0;MatrixFw2a,w2b;if(_w2a==NULL||_w2b==NULL){w2a=a2w;w2b=b2w;w2a.inverse();w2b.inverse();}else{w2a=*_w2a;w2b=*_w2b;}reset(a2w,b2w);bits=0;all_bits=0;F32mu=0;do{nextBit();VectorFva,sa;w2a.mulV(-v,&va);p[last]=a->support(va);a2w.mulP(p[last],&sa);VectorFvb,sb;w2b.mulV(v,&vb);q[last]=b->support(vb);b2w.mulP(q[last],&sb);VectorFw=sa-sb;F32nm=mDot(v,w)/dist;if(nm>mu)mu=nm;if(mu>dontCareDist)returnmu;if(mFabs(dist-mu)sIteration){++num_irregularities;returndist;}y[last]=w;all_bits=bits|last_bit;if(!closest(v)){++num_irregularities;returndist;}dist=v.len();}while(bitssTolerance);if(bits==15&&mu<=0)dist=0;returndist;}
2024/11/12 17:21:22 50KB GJK 碰撞
1
实现效果:http://v.youku.com/v_show/id_XMTU2Mzk0NjU3Ng==.html如何在你的电脑上运行这个程序?1,它需要cvblobslib这一个opencv的扩展库来实现检测物体与给物体画框的功能,具体安装信息请见:http://dsynflo.blogspot.com/2010/02/cvblobskib-with-opencv-installation.html,当你配置好cvblobslib之后,你可以用这一的程序进行测试:http://dl.dropbox.com/u/110310945/Blobs%20test.rar2,视频中两个摄像头之间的距离是6cm,你可以根据你摄像头的型号,来选择合适的距离来达到最好的效果。
3,在进行测距之前,首先需要对摄像头进行标定,那么如何标定呢?在stdafx.h中把"#defineCALIBRATION0"改成“#defineCALIBRATION1”表示进行标定,标定之后,你就可以在工程目录下的"CalibFile"文件夹中得到标定信息的文件。
如果标定效果还不错,你就可以吧"#defineCALIBRATION"改成0,以后就不需要再标定,直接使用上一次的标定信息。
你还需要把"#defineANALYSIS_MODE1"这行代码放到stdafx.h中。
4,视频中使用的是10*7的棋牌格,共摄录40帧来计算摄像头的各种参数,如果你像使用其他棋盘格,可以在"StereoFunctions.cpp"文件中修改相应参数。
5,如果你无法打开摄像头,可以在"StereoGrabber.cpp"文件中修改代码“cvCaptureFromCAM(index)”中index的值。
6,Aboutcomputingdistance:itinterpolatestherelationshipbetweendepth-valueandreal-distancetothirddegreepolynomial.Soiusedexcelfile"interpolation"forinterpolationtofindk1tok4,youshouldfindyourownvalueoftheseparameters.7,你可以通过调整控制窗口中各个参数的滑块,从而来得到更好的视差图。
8,在目录下的”distance“文件夹中,有计算距离信息的matlab代码。
9,如果你想了解基本的理论,可以看一下这个文档和代码(视频里的代码其实就是根据这个代码改的):http://scholar.lib.vt.edu/theses/available/etd-12232009-222118/unrestricted/Short_NJ_T_2009.pdf视频中环境:vs2008,opencv2.1
2024/11/10 7:30:13 24.09MB opencv 双目测距 双目标定 双目视觉
1
fori=1:popcountpop(i,:)=rand(1,9);%初始化粒子位置V(i,:)=rand(1,9);%初始化粒子速度%计算粒子适应度值Center=pop(i,1:3);SP=pop(i,4:6);W=pop(i,7:9);Distance=dist(Center',SamIn);SPMat=repmat(SP',1,SamNum);%repmat具体作用UnitOut=radbas(Distance./SPMat);NetOut=W*UnitOut;%网络输出Error=SamOut-NetOut;%网络误差%SSE=sumsqr(Error);%fitness(i)=SSE;RMSE=sqrt(sumsqr(Error)/SamNum);fitness(i)=RMSE;%fitness(i)=fun(pop(i,:));end
2023/7/7 4:29:40 3KB PSO RBF
1
/* CX20106A超声波发送与接受法度圭表标准 40KHz脉冲由单AT89S52单片机P1.0口送出,由P3.2(INT0)付与中断方式付与。
按时器0,按时器1中断方式责任,T1为8位自动重装方式(按时12.5us),T0为16位按时器(按时约65ms) 超声波接受付与内部中断INT0,接受到返回脉冲后,在内部中断法度圭表标准中计算距离。
65ms超声波传布距离约65×10^(-3)× 340m/s=22.1m,距离足够了,远超CX20106A的丈量规模。
40KHz对于应波周期T=1/40KHz=25us,方波高占空比50%,上下电平宽度分别占0.5T=12.5us。
按时器T1付与8位自动重装方式(按时12.5us),在单片机付与12MHz晶振的前提下,(2^8-X)×12/12us=12.5us (1)当X=0xF3时,2^8-X=13,(2)当X=0xF4时,2^8-X=12, 所以,取X=0xF3,0xF4均能够满足计时申请。
距离表普通4位数码管上,单元为cm。
*//*单片机P2口接74HC138(三八译码器)P2.3--74HC138:/EI、P2.2--74HC138:A二、P2.1--74HC138:A一、P2.0--74HC138:A0译码器输入Y0,Y一、Y二、Y三、Y四、Y五、Y六、Y7均低电平实用,分别选通1~8个数码管。
搜罗2个四位一体数码管LG3641BH,共2x4=8个数码管。
数码管数据口为P0口。
数码管为共阳4位一体数码管。
成果:译码器输入为1——8个数码管的段选信号,轮流遴选1——8数码管。
dispaly(uintd)将d(distance)的千、百、十、个按次表普通1~3号数码管上。
展现原理: 一、送出要展现的段数 二、P2译码,选摘要展现的位 三、延时1——2ms,功夫不能过长,不然会闪灼,也不能过短,不然会很暗。
四、作废段选,消隐! 若要展现多段,重复以上4步!*/
2023/4/28 6:54:01 1.73MB CX20106A 超声波 测距 keil
1
行使hausdorff距离变更实现的图像模板匹配(matlab),
2023/3/28 5:32:38 18KB matlab hausdo matchi
1
这个你懂的!!淘宝卖380RMB该火车时辰表数据从官方获取,包含当前开行的4143个车次的所有数据(车站,票价等),共44663条记录。
本站的时辰表数据库将不断更新,但由于数据量庞大,无法做到每次都及时更新,如需最新数据库请和本人联系。
近期受数据源变动的影响,数据库和数据处理程序重新开发,部分数据库字段有所调整,在此给您带来的不便表示歉意,敬请希望继续关注本站。
应广大网友的要求,调整后的数据库中增加了“里程”和“列车类型”字段,方便大家计算票价。
“票价”和“里程”字段改为数字类型,“历时”改为时间型,方便计算和统计。
数据库中车次和站序两个字段被设为联合主键,便于索引和查询。
对于动车和高铁来说,票价字段依次代表一等座、二等座和特等座,对于其他车次来说,票价字段依次代表硬座,硬卧,软座,软卧。
其中,详细的车次信息如下:C字头城际列车:160个车次D字头动车组: 958个车次G字头高速动车:523个车次Z字头直快列车:52个车次T字头特快列车:296个车次K字头快速列车:1220个车次普快列车:  845个车次Y字头旅游专列:6个车次L字头临时列车:48个车次Q字头列车:  3个车次S字头列车:  32个车次为了使数据冗余量和查询速度最优,所有的列车时辰数据均为一张表。
表结构如下:表:Train字段及数据类型:ID文本列车车次Type文本列车类型(普快,空调快速,动车…)S_No数字站序Station文本车站Day数字日期(当天,第2天,第3天)A_Time时间到达时间D_Time时间离开时间Distance数字里程P1数字硬座/一等座票价P2数字硬卧/二等座票价P3数字软座/特等座票价P4数字软卧票价数据库查询示例/*站站查询:从枣庄站到北京站的所有列车(两种不同方式的SQL语句)*/SelectT1.*FromTrainT1,TrainT2,TrainT3WhereT2.Station='枣庄'andT3.Station='北京'andT2.S_No<T3.S_NoandT2.ID=T3.IDandT1.ID=T2.IDSelect*FromTrainWhereIDin(SelectT1.IDFromTrainT1InnerJoinTrainT2onT1.ID=T2.IDWhereT1.Station='枣庄'andT2.Station='北京'andT1.S_No<T2.S_No)来自zhaoqi.org解压密码:Zhaoqi.Org
2018/7/13 22:14:05 5.63MB 列车时刻表
1
WIFI测距,经过RSSI(ReceivedSignalStrengthIndication)实现室内wifi结点测试距离。
集成inssider功能,并对信号做算法处理与优化。
(WIFIrangingthroughRSSI(ReceivedSignalStrengthIndication)toachieveindoorwifinodetestdistance.Integratedinssiderfunction,andsignalprocessingalgorithmsandoptimizationtodo.)
2016/5/24 21:04:15 11.93MB WIFI RSSI Distance inssider
1
汽车刹车距离matlab代码使用磁场的距离测量系统已经研究过的测量系统利用了磁场如何在空间中渗透的知识。
完成该项目的目的是创建一个感应工具,以确定沿着轨道相互跟随的两个移动小车之间的距离。
当手推车之间的距离减小并且明显发生碰撞时,霍尔效应传感器将拾取磁场的变化,并将对一个手推车施加破坏机制。
前面的推车配备有磁铁,其面向后面的推车,随后的推车将配备有霍尔效应传感器,其面向第一个推车。
然后使用霍尔效应传感器的输出电压来确定小车之间的距离。
下一个推车配置有直流电动机,如果两个推车之间的距离太近,则后面的推车会减速。
入门打开MATLAB并简单地运行仿真和验证Arduino代码,以便本人运行实验。
先决条件MATLAB许可证和Arduino下载。
部署方式MATLAB代码仅用于分析。
Arduino代码可以上传到ArduinoUNO,用作该项目的微控制器。
建于-使用的编码环境-使用的其他编码环境贡献请阅读有关我们的行为准则以及向我们提交请求请求的过程的详细信息。
版本控制我们用于版本控制。
有关可用的版本,请参见。
作者菲利普·特鲁佩利(PhillipTr
2022/10/6 18:55:03 1.12MB 系统开源
1
共有七个完整算法%1.基于聚类的RBF网设计算法%一维输入,一维输出,逼近效果很好!SamNum=100;%总样本数TestSamNum=101;%测试样本数InDim=1;%样本输入维数ClusterNum=10;%隐节点数,即聚类样本数Overlap=1.0;%隐节点重叠系数%根据目标函数获得样本输入输出rand('state',sum(100*clock))NoiseVar=0.1;Noise=NoiseVar*randn(1,SamNum);SamIn=8*rand(1,SamNum)-4;SamOutNoNoise=1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2);SamOut=SamOutNoNoise+Noise;TestSamIn=-4:0.08:4;TestSamOut=1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2);figureholdongridplot(SamIn,SamOut,'k+')plot(TestSamIn,TestSamOut,'r--')xlabel('Inputx');ylabel('Outputy');Centers=SamIn(:,1:ClusterNum);NumberInClusters=zeros(ClusterNum,1);%各类中的样本数,初始化为零IndexInClusters=zeros(ClusterNum,SamNum);%各类所含样本的索引号while1,NumberInClusters=zeros(ClusterNum,1);%各类中的样本数,初始化为零IndexInClusters=zeros(ClusterNum,SamNum);%各类所含样本的索引号%按最小距离原则对所有样本进行分类fori=1:SamNumAllDistance=dist(Centers',SamIn(:,i));[MinDist,Pos]=min(AllDistance);NumberInClusters(Pos)=NumberInClusters(Pos)+1;IndexInClusters(Pos,NumberInClusters(Pos))=i;end%保存旧的聚类中心OldCenters=Centers;fori=1:ClusterNumIndex=IndexInClusters(i,1:NumberInClusters(i));Centers(:,i)=mean(SamIn(:,Index)')';end%判断新旧聚类中心能否一致,是则结束聚类EqualNum=sum(sum(Centers==OldCenters));ifEqualNum==InDim*ClusterNum,break,endend%计算各隐节点的扩展常数(宽度)AllDistances=dist(Centers',Centers);%计算隐节点数据中心间的距离(矩阵)Maximum=max(max(AllDistances));%找出其中最大的一个距离fori=1:ClusterNum%将对角线上的0替换为较大的值AllDistances(i,i)=Maximum+1;endSpreads=Overlap*min(AllDistances)';%以隐节点间的最小距离作为扩展常数%计算各隐节点的输出权值Distance=dist(Centers',SamIn);%计算各样本输入离各数据中心的距离SpreadsMat=repmat(Spreads,1,SamNum);HiddenUnitOut=radbas(Distance./SpreadsMat);%计算隐节点输出阵HiddenUnitOutEx=[HiddenUnitOut'ones(SamNum,1)]';%考虑偏移W2Ex=SamOut*pinv(HiddenUnitOutEx);%求广义输出权值W2=W2Ex(:,1:ClusterNum);%输出权值B2=W2Ex(:,ClusterNum+1)
2017/4/12 3:58:08 8KB rbf算法源程序
1
数据格式为:'ID','Type','Station','S_No','Day','A_Time','D_Time','Distance','P1','P2','P3','P4'如:INSERTINTO`train`VALUES('D10','动车组','沈阳北','1','1','-','09:01','0','','','-','-');
1
共 11 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡