ArcGIS 获得三角形内切圆

摘要:
如何找到三角形的内部坐标来自:https://zhidao.baidu.com/question/158982463.html三角形的边长是a,b,c,顶点是a(x1,y1)b(x2,y2)c(x3,y3),并且给出了三角形的中心是角平分线的交点,并且到三条边的距离相等的证明。设:在三角形ABC中,三个顶点的坐标为:A(x1,y1),B(x2,y2),C(x3,y3)BC=A,CA=B,AB=C三角形的中心是M(X,Y),则有aMA+
如何求三角形的内心坐标来自:https://zhidao.baidu.com/question/158982463.html

三角形边长为a,b,c,顶点为A(x1,y1)B(x2,y2)C(x3,y3),并给出证明

内心是角平分线的交点,到三边距离相等.
设:在三角形ABC中,三顶点的坐标为:A(x1,y1),B(x2,y2),C(x3,y3) BC=a,CA=b,AB=c
内心为M (X,Y)则有aMA+bMB+cMC=0(三个向量)
MA=(X1-X,Y1-Y)
MB=(X2-X,Y2-Y)
MC=(X3-X,Y3-Y)
则:a(X1-X)+b(X2-X)+c(X3-X)=0,a(Y1-Y)+b(Y2-Y)+c(Y3-Y)=0
∴X=(aX1+bX2+cX3)/(a+b+c),Y=(aY1+bY2+cY3)/(a+b+c)
∴M((aX1+bX2+cX3)/(a+b+c),(aY1+bY2+cY3)/(a+b+c)),真的很麻烦,有具体数的话,你可以求两条角分线,再求交点

三角形内切圆半径公式:r=2S/(a+b+c)

关注微信公众号,学习更多

ArcGIS 获得三角形内切圆第1张

import arcpy

def FieldExists(TableName,FieldName):
    desc = arcpy.Describe(TableName)
    FieldName=FieldName.upper()
    for field in desc.fields:
        if field.Name.upper() ==FieldName:
            return True
            break
    return False
#获得点的距离
def pointDistance(pt1,pt2):
    return math.sqrt((pt1.X-pt2.X)*(pt1.X-pt2.X)+(pt1.Y-pt2.Y)*(pt1.Y-pt2.Y))

#获得所有的点
def getallpoint(geo):
    parray = arcpy.Array()
    for part in geo:
        # Print the part number
        # print("Part {}:".format(partnum))
        # Step through each vertex in the feature
        for pnt in part:
            if pnt == None:
                # If pnt is None, this represents an interior ring
                print("Interior Ring:")
                #n = n + 1
            else:
                parray.add(pnt)
    return parray

infc = arcpy.GetParameterAsText(0)
outfc = arcpy.GetParameterAsText(1)
arcpy.AddMessage("输入:"+infc)
arcpy.AddMessage("输出:"+outfc)
FieldName="X"
if not FieldExists(infc,FieldName):
    arcpy.AddMessage("添加字段:" + FieldName)
    arcpy.management.AddField(infc,FieldName , "DOUBLE")
FieldName="Y"
if not FieldExists(infc,FieldName):
    arcpy.AddMessage("添加字段:" + FieldName)
    arcpy.management.AddField(infc,FieldName , "DOUBLE")
FieldName="R"
if not FieldExists(infc,FieldName):
    arcpy.AddMessage("添加字段:"+FieldName)
    arcpy.management.AddField(infc,FieldName , "DOUBLE")


with arcpy.da.UpdateCursor(infc, ["OID@", "SHAPE@","X","Y","R","SHAPE@AREA"]) as cursor:
    for row in cursor:
        parray=getallpoint(row[1])
        pnum=len(parray)
        if pnum>4:
            arcpy.AddMessage("节点大于4"+str(pnum)+",FID="+str(row[0]))
            continue

        pt1=parray[0]
        pt2=parray[1]
        pt3=parray[2]
        x1=pt1.X
        y1=pt1.Y

        x2=pt2.X
        y2=pt2.Y

        x3=pt3.X
        y3=pt3.Y
        a=pointDistance(pt2,pt3)
        b=pointDistance(pt1,pt3)
        c=pointDistance(pt1,pt2)
        x=(a*x1+b*x2+c*x3)/(a+b+c)
        y=(a*y1+b*y2+c*y3)/(a+b+c)
        s=row[5] #(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2))/2.0
        r=2.0*s/(a+b+c)
        row[2]=x
        row[3] =y
        row[4] =r
        cursor.updateRow(row)
out_layer="outyl"
sr = arcpy.Describe(infc).spatialReference
arcpy.MakeXYEventLayer_management(infc, "x", "y", out_layer, spatial_reference=sr)

arcpy.Buffer_analysis(out_layer, outfc, buffer_distance_or_field="R")

免责声明:文章转载自《ArcGIS 获得三角形内切圆》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一个word文档中,多个表格的批量调整(根据窗口调整表格和添加表格水平线)倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_数组下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ArcGIS创建要素提示表已经被注册(Table already registered)

环境说明: 服务端:Centos6.7  Oracle11gR2 RAC集群     已经注册企业级数据库 本机:WIN10   ArcGIS10.1 问题描述: 因为原来的表空间创建错误(路径指定错误),需要将表空间数据清空后,删除表空间并重建,重建后无法导入或者新建原有数据,提示表已经存在错误,具体错误信息如下: Table already regis...

ArcEngine开发——许可问题

  在ArcGIS 10系列中,安装好ArcGIS Desktop和ArcObject SDK,获取软件授权就可以进行ArcObject开发了。在这个新版本的开发中,许可方式发生了一定的变化,此文对此做个讲述。 许可初始化   在ArcGIS 9.3中,对于所有单机应用程序(stand-alone applications),在运行ArcObjects组件...

ArcGIS中的三种查询

ArcGIS runtime SDK for WPF/Silverlight中的三种常用的查询:QueryTask、FindTask、IdentifyTask都是继承自ESRI.ArcGIS.Client.Tasks,关系如下图所示: 1、QueryTask:是一个进行空间和属性查询的功能类,它可以在某个地图服务的某个子图层内进行查询,顺便提一下的是,Q...

ArcMap 0 (ArcGIS10.2安装(完善版--能解决常见问题))

一入GIS深似海,从此相逢是故人(这句话适合初步接触GIS的,我算是初窥门径。还是道行太浅,只是多了感慨) 一、前言: 1. 本人GIS专业,对于ArcGIS较为熟悉。由于专业和其它经历需要,接触过不少各种类型的软件如ENVI、Visual Studio 各版本(10、12、15、17)、matlab、CAD、CASS、VC6.0、python、spss、...

使用ArcGIS GP服务之四GP服务发布

所有的数据与环境都配置好以后,我们就需要发布GP服务了。对于ArcGIS 10.1,发布GP服务方式改变了,得需要ArcMap帮助。我们可以先将这个服务打包定义,然后发给别人,使用Sever发布,也可以直接使用Server发布。 不论怎么样,都需要预先在ArcMap跑一遍。 菜单栏Geoprocessing-Results查看结果。 服务发布...

GP的使用心得

在ArcEngine时,GP无疑是GIS开发者的神器。自ArcEngine9.2开始新增一个程序集ESRI.ArcGIS.Geoprocessor,它能调用包含扩展模块在内的所有Geoprocessing工具。关于GP的使用问题,做如下总结: 1.许可问题 大家都知道,AE二次开发有两种许可定义方式:一是直接拖放License控件,右键设置其属性,另一种方...