怎样判断是否有毛刺,并计算内齿根圆直径计算公式

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
基于机器视觉的圆环电阻片缺陷检测算法研究
下载积分:1000
内容提示:基于机器视觉的圆环电阻片缺陷检测算法研究
文档格式:PDF|
浏览次数:20|
上传日期: 13:31:13|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
基于机器视觉的圆环电阻片缺陷检测算法研究
关注微信公众号犯罪现场血迹形态成因判断
李宇+吴强+刘景宁[摘 要]滴落状血迹是刑事案件常见的血迹形态,是对犯罪现场重建分析的重要依据。本文通过血液滴落的模拟实验,分析测量结果,研究速度和介质以及高度对血迹形态的影响,得出相应规律。通过对血迹形态的观察分析,反推滴落状血迹的成因,进而还原案件的真实情况,为公安机关侦破案件提供更大的助力。[关键词]滴落状血迹形态;速度;介质;血液滴落高度中图分类号:TS875 文献标识码:A 文章编号:X(4-04血迹是命案现场上重要的痕迹物证,也是法庭科学极具采信力的重要证据之一,通过对血迹形态、血迹分布的观察与分析以及现场血迹的分析化验,能够推测判定犯罪人与被害人在现场的活动过程确定案件性质,给侦查破案提供有价值的信息。血迹痕迹和物证的双重特性决定了其在命案现场的重要地位和作用。作为物证,法医可以根据血迹的生物学特性,确定血迹的血型、种属以及根据血迹进行DNA同一认定。在这一方面,血迹物证已经得到广泛应用研究,三国时期谢承所著的《会稽先贤传》中的“滴骨验亲法”和宋代宋慈所著的《洗冤录集》中的“合血法”都是对血液血型的研究。作为犯罪现场重建的重要技术内容之一,犯罪现场血迹形态分析是一种特殊的痕迹,。犯罪现场上由于犯罪行为形成的血迹形态可以真实地反映案件情况,通过对犯罪现场遗留的血迹形态痕迹进行分析和鉴定,可以局部或完整地再现案件的具体细节和过程,在侦破案件中能够起到其他物证不能替代的作用。犯罪现场血迹形态的尺寸、形状、分布等情况分析与研究,目前已成为判断事件的性质以及事件发生过程的一门新兴科学。本文通过模拟实验对犯罪现场血迹成因进行了准确地判断,并获得了相关的线性方程。1.实验1.1 实验仪器与试剂1.1.1 实验仪器:仪器自制四种介质:白纸、瓷砖、三合板、水泥地。测量工具:直尺、卷尺、支架、铁架台、滴管、照相机。实验用血:抗凝鸡血。1.1.2 主要试剂血液抗凝剂:草酸氨。2.实验部分2.1 血液制备及每滴血液容量测量。2.1.1 抗凝血液制备准确称量0.4g草酸胺试剂,将其研磨成粉末状后加入玻璃器皿中,将购买好的200mL血液加入放有草酸胺的玻璃器皿,迅速搅拌摇匀,将制备好的的抗凝血液放入冰箱冷藏,待使用时取出。2.1.2 每滴血液的容量测量分别用滴管选取1mL、2mL、3mL、4mL、5mL、6mL、7mL、8mL8个不同容量的血液匀速滴下,重复3次,记录不同容量血液的滴数,计算每组每滴血液的容量,计算平均值,求得每滴血液容量在静态和动态条件下的常量。2.1.3 静态条件下,不同高度不同介质下滴落状血迹形态静态条件下,以10cm为一个高度梯度,用滴管吸取上述求得的每滴血液容量常量,从50cm开始,在50cm~200cm高度范围内;在每一高度上,将滴管吸取的等量血液垂直滴落在瓷砖、三合板、白纸、水泥地四种介质上,观察不同高度不同介质下滴落状血迹的形态并进行对比,发现其中的一般性差别,同时进行拍照记录。待滴落状血迹干涸后,从四个方向测量滴落状血迹的直径,求其平均值为滴落状血迹的直径[19]。同一高度进行3次滴落模拟实验。2.1.4同一介质不同高度滴落状血迹直径线性关系根据表2的统计数据作图,观察同一介质不同高度滴落状血迹直径大小与高度是否存在线性关系,探讨两者之间是否存在线性回归方程,便于发现高度对滴落状血迹形态的影响,从而得出一般性结论。根据图1观察瓷砖上滴落状血迹直径大小与滴落高度是否存在线性关系,由图中的渐进线可以明确地看出两者存在较好的线性关系,通过计算推导得出瓷砖上状血迹直径大小与高度的线性回归方程为:y=0.003x+1.422,r?=0.8081。观察图2,可以清晰地看出滴落状血迹在瓷砖表面呈规则的圆形,血迹周边较光滑,圆形周围边缘无锯齿痕。直径与高度成正比。到一定高度后,大部分血迹滴落状血迹外围还伴随着血迹滴落时溅出的一个小血滴,两个血滴之间的距离和直径无直接联系,不具有一般规律性。根据图3观察三合板上滴落状血迹直径大小与滴落高度是否存在线性关系,由图中的渐进线可以明确地看出两者存在较好的线性关系,通过计算推导得出三合板上状血迹直径大小与高度的线性回归方程为:y=0.9,r?=0.9201。观察图4,可以清晰地看出滴落状血迹在三合板表面基本表现为圆形,,锯齿痕较为明显,血迹边缘锯齿个数与高度成正比。根据图5观察白纸上滴落状血迹直径大小与滴落高度是否存在线性关系,由图中的渐进线可以明确地看出两者存在较好的线性关系,通过计算推导得出白纸上状血迹直径大小与高度的线性回归方程为:y=0.5,r?=0.8422。观察图6,可以清晰地看出滴落状血迹在白纸表面基本表现为圆形,血迹边缘毛刺状个数与高度成正比,伴随着高度的增加一定程度会有卫星点出现。根据图7观察水泥地上滴落状血迹直径大小与滴落高度是否存在线性关系,由图中的线性关系线可以明确地看出两者存在较好的线性关系,通过计算推导得出水泥地上状血迹直径大小与高度的线性回归方程为:y=0.002x+1.5413,r?=0.8356。观察图8,可以清晰地看出水泥地表面滴落状血迹形态基本呈圆形,但血迹边缘锯齿个数与高度两者之间无一般性规律。2.1.5介质和高度的综合影响根据上述数据,将介质和高度两个因素相结合作图,观察高度与介质对滴落状血迹的影响并进行对比得出一般性结论。由上图可以看出滴落状血迹直径大小不仅受滴落高度的影响,还与介质的不同种类有关。所以根据犯罪现场遗留的血迹形态判断其形成原因必须把不同介质载体的因素考虑其中。
2.1.6介质和高度对滴落状血迹边缘锯齿个数的影响根据以上的拍照记录,观察不同介质从50cm开始,在50cm~200cm的高度范围内,以10cm为一个高度梯度的血迹形态,记录血迹边缘锯齿个数,制作成表4。根据表中数据制作等量血迹不同高度在不同介质上形成血迹形态表面边缘突出锯齿个数的散点折线图,观察其中的线性关系。由上图10可以清晰地看出白纸和三合板上不同高度滴落状血迹表面边缘锯齿个数有很好的线性关系,通过计算推导白纸上滴落状血迹边缘锯齿个数和高度的线性回归方程为(1)锯齿个数最小值(min):y=0.;(2)锯齿个数最大值(max):y=0.。三合板上滴落状血迹边缘锯齿个数和高度线性回归方程为(1)锯齿个数最小值(min):y=0.;(2)锯齿个数最大值(max):y=0.。2.1.7 动态条件下,水泥地上高度和速度对滴落状血迹形态的影响用滴管吸取上述求得的每滴血液容量常量,从50cm开始,在50cm~150cm高度范围内,每隔10cm为一个高度梯度;在每一高度上,将滴管吸取的等量血液在慢走(1.3m/s)、急走(1.8m/s)、慢跑(2.9m/s)、快跑(6.0m/s)的情况下垂直滴落在水泥地上,观察不同高度水泥地上滴落状血迹的形态并进行对比,发现其中的一般性差别,同时进行拍照记录。待滴落状血迹干涸后,从四个方向测量滴落状血迹的直径,求其平均值为滴落状血迹的直径。同一高度进行3次滴落模拟实验,将滴落状血迹直径最终数据记录制作成表5。2.1.8 动态条件下,水泥地上高度对滴落状血迹直径大小的影响根据表5水泥地上不同高度滴落状血迹形态直径统计数据制作慢走、急走、慢跑、快跑情况下滴落状血迹直径大小与高度的散点折线图,观察两者是否存在线性关系以及速度对滴落状血迹的影响。由上图12、图13可以清晰地看出水泥地上不同速度滴落状血迹直径大小与其滴落高度都有较好的线性关系,通过计算推导慢走时滴落状血迹直径大小与滴落高度线性回归方程:y=0.8,r?=0.9076;急走时滴落状血迹直径大小与滴落高度线性回归方程:y=0.3,r?=0.7145;慢跑时滴落状血迹直径大小与滴落高度线性回归方程:y=0.002x+1.3544,r?=0.9013;快跑时滴落状血迹直径大小与滴落高度线性回归方程:y=0.1,r?=0.9607。观察拍摄照片图16,慢走和急走时,水泥地上滴落状血迹呈近圆形,沿运动方向一侧边缘出现较多毛刺状锯齿,而对侧边缘很少或者说几乎没有。跑和快跑时,水泥地上滴落状血迹呈椭圆形,沿运动方向一侧有较多的突起或彗星状飞溅斑点,中央区血迹面积缩小。2.1.9 高度和速度对滴落状血迹的综合影响根据上述数据,将高度和速度两个因素相结合作图,观察高度与速度对滴落状血迹的影响并进行对比得出一般性结论。由上图14可以看出滴落状血迹直径大小不仅受滴落高度的影响,还与速度有关。运动条件下, 血滴自身垂直向下的重力和运动方向水平的惯性力形成合力作用在运动的血滴上,而致使血滴的运行轨迹呈抛物线形。当惯性作用力大于血滴的表面张力,在血滴接触介质时则会出现锯齿状或毛刺状突起,甚至与在惯性作用力远大于血滴表面张力时则会分离出小血滴,造成滴落状血迹形态差异明显;如果水平的惯性力超过血滴的表面张力, 就可以在沿运动方向同侧形成毛刺状突起,而沿方向反侧边缘则没有毛刺状锯齿。2.1.10 其他影响犯罪现场血迹形态的因素犯罪现场不仅有滴落状血迹,还有喷溅状血迹、抛甩状血迹、溅落状血迹、流柱状血迹、接触状血迹、渗透状血迹和血泊。在具体案件中, 血迹以单一类型出现并不多见, 常见两类或两类以上血迹类型混合出现, 如喷溅状血迹、抛甩状血迹同时伴流柱状血迹, 滴落状血迹中心部位形成血泊等, 在分析过程中应注意结合尸体损伤, 进行整体、综合分析判断。2.1.11 不同工具不同动作形成的血迹形态取一把长30cm,宽6cm的单刃砍刀,将刀身浸满抗凝血液,手拿刀柄举至头部位置,竖直挥动砍刀,遇阻碍物在墙壁上形成抛甩状血迹;再将刀身浸满抗凝血液,直立手拿砍刀垂直向下,任由刀上血液流落到地面形成流柱状血迹。取一长10cm的螺丝刀,将其浸满抗凝血液,手拿螺丝刀行走形成滴落状血迹;手拿螺丝刀直立不动,任由血液流下,形成流柱状血迹。取一只较小的透明塑料包装袋,将包装袋抽成真空并装满血液,用锤子猛力敲打包装袋,包装袋破裂,包装袋里血液飞溅,形成喷溅状血迹。由上图15~图17,可以清晰地看出:抛甩状血迹是挥动沾血的肢体或工具时,肢体或工具上的血液因离心力作用飞落于介质上形成的血迹。由于抛甩的动作和肢体或工具的带血量以及抛甩血迹飞落介质的不同,所以抛甩状血迹形态比较复杂。但如图17的长条状血迹形态典型,根据血迹离地面的高度以及血迹形态,可以判断应为带血的肢体或工具向下甩动形成的抛甩状血迹。流柱状血迹是血液在重力作用下沿肢体或工具流落到地面形成的血迹。流柱状血迹的基本形态为条柱状。当血量多、肢体或工具血液接触面大,血液在终止端积聚较多。 表现为下粗上细条柱形状,如图18;血量少、肢体或工具血液接触面小,血液积聚于起始端, 表现为上细下粗条柱形状,如图17。身体上的流柱状血痕反应了受伤后的体位变动情况。喷溅状血迹是动脉血管因外力作用破裂致血液喷射于介质上形成的血迹。喷溅状血液速度很快,因此方向一致,基本形态大小相似,多为比较均匀密集的点状迹,其血点直径一般不是很大。喷射方向垂直于介质且在接触介质后不受重力作用时,血迹形态多为圆形。喷溅状血液喷溅在墙面时,血液因重力作用向下流动,可在血点下部形成条柱状血迹,如图17。
3.结论3.1 本文从单个滴落状血迹形态出发,通过等量抗凝血滴在四种介质(瓷砖、三合板、白纸、水泥地)上的模拟实验,探索研究得到不同速度以及不同介质下滴落状血迹直径大小与滴落高度之间的线性关系和滴落状血迹边缘锯齿个数与滴落高度之间的线性关系。3.2 首先模拟静态条件下滴落状血迹在不同介质上不同高度的实验,通过计算得出瓷砖上状血迹直径大小与高度的线性回归方程为:y=0.003x+1.422;三合板上状血迹直径大小与高度的线性回归方程为:y=0.9;白纸上状血迹直径大小与高度的线性回归方程为:y=0.5;水泥地上状血迹直径大小与高度的线性回归方程为:y=0.002x+1.5413。3.3 观察上述实验照片,通过计算推导白纸上滴落状血迹边缘锯齿个数和高度的线性回归方程为①锯齿个数最小值(min):y=0.;②锯齿个数最大值(max):y=0.。三合板上滴落状血迹边缘锯齿个数和高度线性回归方程为①锯齿个数最小值(min):y=0.;②锯齿个数最大值(max):y=0.。3.4 模拟动态条件下滴落状血迹在水泥地上不同高度的实验,通过计算推导慢走时滴落状血迹直径大小与滴落高度线性回归方程:y=0.8,r?=0.9076;急走时滴落状血迹直径大小与滴落高度线性回归方程:y=0.3,r?=0.7145;慢跑时滴落状血迹直径大小与滴落高度线性回归方程:y=0.002x+1.3544,r?=0.9013;快跑时滴落状血迹直径大小与滴落高度线性回归方程:y=0.1,r?=0.9607。3.5 模拟犯罪现场其他血迹形态实验,通过分析得出其血迹形态形成的一般性原因。3.6 根据模拟实验所得出结论进行实际案例应用分析,局部或完整还原案件发生时的具体细节,并与实际情况进行对比,验证了结论的准确性。作者简介:1.李宇(1979.12),女,南京市江宁区公安局, 2015级江苏警官学院,南京工业大学,江苏省公安厅联办化学工程(物证技术方向)工程硕士研究生,从事物证技术研究工作;2.江炀(1995.9-),男,江苏警官学院刑事科学技术系2013级法化学专业学员,从事物证技术研究工作。通讯作者:刘景宁(1960.10-):男,江苏盐城,硕士研究生,教授,江苏警官学院刑事科学技术系、南京工业大学化学及分子工程学院硕士生导师;研究方向:毒物、毒品及微量物证分析,应用化学。
中国科技博览
2016年25期
中国科技博览的其它文章()连接正方形的对角线,利用勾股定理求出的长即可;()利用勾股定理求出小正方形对角线的长即可;()找出过,,三点的圆的圆心及半径,利用勾股定理求解即可;连接,,延长交于点,则,为中点,设,则,再根据勾股定理解答.
()连接,,,;()如图所示,三个正方形的边长均为,,,三点在以为圆心,以为半径的圆上,,能盖住三个正方形所需的圆形硬纸板最小直径为;()如图所示,,,是过,,三点的圆的直径,,为圆心,的半径为,,能盖住三个正方形所需的圆形硬纸板最小直径为;如图为盖住三个正方形时直径最小的放置方法,(分)连接,,延长交于点,则,为中点,设,则,则有:,(分)解得:,(分)则,直径为.(分)
此题比较复杂,解答此题的关键是找出找出以各边顶点为顶点的圆的圆心及半径,再根据勾股定理解答.
3945@@3@@@@正多边形和圆@@@@@@260@@Math@@Junior@@$260@@2@@@@圆@@@@@@52@@Math@@Junior@@$52@@1@@@@图形的性质@@@@@@7@@Math@@Junior@@$7@@0@@@@初中数学@@@@@@-1@@Math@@Junior@@
第三大题,第10小题
求解答 学习搜索引擎 | 在一节数学实践活动课上,老师拿出三个边长都为5cm的正方形硬纸板,他向同学们提出了这样一个问题:若将三个正方形纸板不重叠地放在桌面上,用一个圆形硬纸板将其盖住,这样的圆形硬纸板的最小直径应有多大?问题提出后,同学们经过讨论,大家觉得本题实际上就是求将三个正方形硬纸板无重叠地适当放置,圆形硬纸板能盖住时的最小直径.老师将同学们讨论过程中探索出的三种不同摆放类型的图形画在黑板上,如下图所示:(1)通过计算(结果保留根号与π).(\setcounter{fofo}{1}\Roman{fofo})图\textcircled{1}能盖住三个正方形所需的圆形硬纸板最小直径应为___(\setcounter{fofo}{2}\Roman{fofo})图\textcircled{2}能盖住三个正方形所需的圆形硬纸板最小直径为___(\setcounter{fofo}{3}\Roman{fofo})图\textcircled{3}能盖住三个正方形所需的圆形硬纸板最小直径为___(2)其实上面三种放置方法所需的圆形硬纸板的直径都不是最小的,请你画出用圆形硬纸板盖住三个正方形时直径最小的放置方法,(只要画出示意图,不要求说明理由),并求出此时圆形硬纸板的直径.6178人阅读
百度地图(3)
var BMapLib = window.BMapLib = BMapLib || {};
(function() {
var EARTHRADIUS = ;
var GeoUtils =
BMapLib.GeoUtils = function(){
GeoUtils.isPointInRect = function(point, bounds){
if (!(point instanceof BMap.Point) ||
!(bounds instanceof BMap.Bounds)) {
return false;
var sw = bounds.getSouthWest();
var ne = bounds.getNorthEast();
return (point.lng &= sw.lng && point.lng &= ne.lng && point.lat &= sw.lat && point.lat &= ne.lat);
GeoUtils.isPointInCircle = function(point, circle){
if (!(point instanceof BMap.Point) ||
!(circle instanceof BMap.Circle)) {
return false;
var c = circle.getCenter();
var r = circle.getRadius();
var dis = GeoUtils.getDistance(point, c);
if(dis &= r){
return true;
return false;
GeoUtils.isPointOnPolyline = function(point, polyline){
if(!(point instanceof BMap.Point) ||
!(polyline instanceof BMap.Polyline)){
return false;
var lineBounds = polyline.getBounds();
if(!this.isPointInRect(point, lineBounds)){
return false;
var pts = polyline.getPath();
for(var i = 0; i & pts.length - 1; i++){
var curPt = pts[i];
var nextPt = pts[i + 1];
if (point.lng &= Math.min(curPt.lng, nextPt.lng) && point.lng &= Math.max(curPt.lng, nextPt.lng) &&
point.lat &= Math.min(curPt.lat, nextPt.lat) && point.lat &= Math.max(curPt.lat, nextPt.lat)){
var precision = (curPt.lng - point.lng) * (nextPt.lat - point.lat) -
(nextPt.lng - point.lng) * (curPt.lat - point.lat);
if(precision & 2e-10 && precision & -2e-10){
return true;
return false;
GeoUtils.isPointInPolygon = function(point, polygon){
if(!(point instanceof BMap.Point) ||
!(polygon instanceof BMap.Polygon)){
return false;
var polygonBounds = polygon.getBounds();
if(!this.isPointInRect(point, polygonBounds)){
return false;
var pts = polygon.getPath();
var N = pts.
var boundOrVertex = true;
var intersectCount = 0;
var precision = 2e-10;
var p1, p2;
p1 = pts[0];
for(var i = 1; i &= N; ++i){
if(p.equals(p1)){
return boundOrV
p2 = pts[i % N];
if(p.lat & Math.min(p1.lat, p2.lat) || p.lat & Math.max(p1.lat, p2.lat)){
if(p.lat & Math.min(p1.lat, p2.lat) && p.lat & Math.max(p1.lat, p2.lat)){
if(p.lng &= Math.max(p1.lng, p2.lng)){
if(p1.lat == p2.lat && p.lng &= Math.min(p1.lng, p2.lng)){
return boundOrV
if(p1.lng == p2.lng){
if(p1.lng == p.lng){
return boundOrV
++intersectC
var xinters = (p.lat - p1.lat) * (p2.lng - p1.lng) / (p2.lat - p1.lat) + p1.
if(Math.abs(p.lng - xinters) & precision){
return boundOrV
if(p.lng & xinters){
++intersectC
if(p.lat == p2.lat && p.lng &= p2.lng){
var p3 = pts[(i+1) % N];
if(p.lat &= Math.min(p1.lat, p3.lat) && p.lat &= Math.max(p1.lat, p3.lat)){
++intersectC
intersectCount += 2;
if(intersectCount % 2 == 0){
return false;
return true;
GeoUtils.degreeToRad =
function(degree){
return Math.PI * degree/180;
GeoUtils.radToDegree = function(rad){
return (180 * rad) / Math.PI;
function _getRange(v, a, b){
if(a != null){
v = Math.max(v, a);
if(b != null){
v = Math.min(v, b);
function _getLoop(v, a, b){
while( v & b){
v -= b - a
while(v & a){
v += b - a
GeoUtils.getDistance = function(point1, point2){
if(!(point1 instanceof BMap.Point) ||
!(point2 instanceof BMap.Point)){
point1.lng = _getLoop(point1.lng, -180, 180);
point1.lat = _getRange(point1.lat, -74, 74);
point2.lng = _getLoop(point2.lng, -180, 180);
point2.lat = _getRange(point2.lat, -74, 74);
var x1, x2, y1, y2;
x1 = GeoUtils.degreeToRad(point1.lng);
y1 = GeoUtils.degreeToRad(point1.lat);
x2 = GeoUtils.degreeToRad(point2.lng);
y2 = GeoUtils.degreeToRad(point2.lat);
return EARTHRADIUS * Math.acos((Math.sin(y1) * Math.sin(y2) + Math.cos(y1) * Math.cos(y2) * Math.cos(x2 - x1)));
GeoUtils.getPolylineDistance = function(polyline){
if(polyline instanceof BMap.Polyline ||
polyline instanceof Array){
if(polyline instanceof BMap.Polyline){
pts = polyline.getPath();
if(pts.length & 2){
var totalDis = 0;
for(var i =0; i & pts.length - 1; i++){
var curPt = pts[i];
var nextPt = pts[i + 1]
var dis = GeoUtils.getDistance(curPt, nextPt);
totalDis +=
return totalD
GeoUtils.getPolygonArea = function(polygon){
if(!(polygon instanceof BMap.Polygon) &&
!(polygon instanceof Array)){
if(polygon instanceof BMap.Polygon){
pts = polygon.getPath();
if(pts.length & 3){
var totalArea = 0;
var LowX = 0.0;
var LowY = 0.0;
var MiddleX = 0.0;
var MiddleY = 0.0;
var HighX = 0.0;
var HighY = 0.0;
var AM = 0.0;
var BM = 0.0;
var CM = 0.0;
var AL = 0.0;
var BL = 0.0;
var CL = 0.0;
var AH = 0.0;
var BH = 0.0;
var CH = 0.0;
var CoefficientL = 0.0;
var CoefficientH = 0.0;
var ALtangent = 0.0;
var BLtangent = 0.0;
var CLtangent = 0.0;
var AHtangent = 0.0;
var BHtangent = 0.0;
var CHtangent = 0.0;
var ANormalLine = 0.0;
var BNormalLine = 0.0;
var CNormalLine = 0.0;
var OrientationValue = 0.0;
var AngleCos = 0.0;
var Sum1 = 0.0;
var Sum2 = 0.0;
var Count2 = 0;
var Count1 = 0;
var Sum = 0.0;
var Radius = EARTHRADIUS;
var Count = pts.
for (var i = 0; i & C i++) {
if (i == 0) {
LowX = pts[Count - 1].lng * Math.PI / 180;
LowY = pts[Count - 1].lat * Math.PI / 180;
MiddleX = pts[0].lng * Math.PI / 180;
MiddleY = pts[0].lat * Math.PI / 180;
HighX = pts[1].lng * Math.PI / 180;
HighY = pts[1].lat * Math.PI / 180;
else if (i == Count - 1) {
LowX = pts[Count - 2].lng * Math.PI / 180;
LowY = pts[Count - 2].lat * Math.PI / 180;
MiddleX = pts[Count - 1].lng * Math.PI / 180;
MiddleY = pts[Count - 1].lat * Math.PI / 180;
HighX = pts[0].lng * Math.PI / 180;
HighY = pts[0].lat * Math.PI / 180;
LowX = pts[i - 1].lng * Math.PI / 180;
LowY = pts[i - 1].lat * Math.PI / 180;
MiddleX = pts[i].lng * Math.PI / 180;
MiddleY = pts[i].lat * Math.PI / 180;
HighX = pts[i + 1].lng * Math.PI / 180;
HighY = pts[i + 1].lat * Math.PI / 180;
AM = Math.cos(MiddleY) * Math.cos(MiddleX);
BM = Math.cos(MiddleY) * Math.sin(MiddleX);
CM = Math.sin(MiddleY);
AL = Math.cos(LowY) * Math.cos(LowX);
BL = Math.cos(LowY) * Math.sin(LowX);
CL = Math.sin(LowY);
AH = Math.cos(HighY) * Math.cos(HighX);
BH = Math.cos(HighY) * Math.sin(HighX);
CH = Math.sin(HighY);
CoefficientL = (AM * AM + BM * BM + CM * CM) / (AM * AL + BM * BL + CM * CL);
CoefficientH = (AM * AM + BM * BM + CM * CM) / (AM * AH + BM * BH + CM * CH);
ALtangent = CoefficientL * AL - AM;
BLtangent = CoefficientL * BL - BM;
CLtangent = CoefficientL * CL - CM;
AHtangent = CoefficientH * AH - AM;
BHtangent = CoefficientH * BH - BM;
CHtangent = CoefficientH * CH - CM;
AngleCos = (AHtangent * ALtangent + BHtangent * BLtangent + CHtangent * CLtangent) / (Math.sqrt(AHtangent * AHtangent + BHtangent * BHtangent + CHtangent * CHtangent) * Math.sqrt(ALtangent * ALtangent + BLtangent * BLtangent + CLtangent * CLtangent));
AngleCos = Math.acos(AngleCos);
ANormalLine = BHtangent * CLtangent - CHtangent * BL
BNormalLine = 0 - (AHtangent * CLtangent - CHtangent * ALtangent);
CNormalLine = AHtangent * BLtangent - BHtangent * AL
if (AM != 0)
OrientationValue = ANormalLine / AM;
else if (BM != 0)
OrientationValue = BNormalLine / BM;
OrientationValue = CNormalLine / CM;
if (OrientationValue & 0) {
Sum1 += AngleC
Sum2 += AngleC
var tempSum1, tempSum2;
tempSum1 = Sum1 + (2 * Math.PI * Count2 - Sum2);
tempSum2 = (2 * Math.PI * Count1 - Sum1) + Sum2;
if (Sum1 & Sum2) {
if ((tempSum1 - (Count - 2) * Math.PI) & 1)
Sum = tempSum1;
Sum = tempSum2;
if ((tempSum2 - (Count - 2) * Math.PI) & 1)
Sum = tempSum2;
Sum = tempSum1;
totalArea = (Sum - (Count - 2) * Math.PI) * Radius * R
return totalA
使用方法:
var point = new BMap.Point(x,y)
var circle = new BMap.Circle(mPoint,1000,{fillColor:"blue", strokeWeight: 1 ,fillOpacity: 0.3, strokeOpacity: 0.3});
if(BMapLib.GeoUtils.isPointInCircle(point,circle)){
alert("该point在circle内");

我要回帖

更多关于 链轮节圆直径计算 的文章

 

随机推荐