我正在研究空间分析问题,该工作流程的一部分是计算连接线段之间的角度.

每个线段仅由两个点组成,每个点都有一对XY坐标(笛卡尔坐标).这是GeoGebra的图像.我总是对在0到180范围内获得正角度感兴趣.但是,根据输入线段中顶点的顺序,我得到所有类型的角度.

我使用的输入数据以坐标元组的形式提供.根据顶点创建顺序,每个线段的最后/结束点可以不同.以下是Python代码中的一些案例.我得到它们的线段的顺序是随机的,但在元组的元组中,第一个元素是起点,第二个元素是终点.例如,DE线段将具有((1,1.5),(2,2))并且(1,1.5)是起点,因为它具有坐标元组中的第一个位置.

但是我需要确保在DE,DF和ED,DF等之间获得相同的角度.

vertexType = "same start point; order 1"

#X, Y X Y coords

lineA = ((1,1.5),(2,2)) #DE

lineB = ((1,1.5),(2.5,0.5)) #DF

calcAngle(lineA, lineB,vertexType)

#flip lines order

vertexType = "same start point; order 2"

lineB = ((1,1.5),(2,2)) #DE

lineA = ((1,1.5),(2.5,0.5)) #DF

calcAngle(lineA, lineB,vertexType)

vertexType = "same end point; order 1"

lineA = ((2,2),(1,1.5)) #ED

lineB = ((2.5,0.5),(1,1.5)) #FE

calcAngle(lineA, lineB,vertexType)

#flip lines order

vertexType = "same end point; order 2"

lineB = ((2,2),(1,1.5)) #ED

lineA = ((2.5,0.5),(1,1.5)) #FE

calcAngle(lineA, lineB,vertexType)

vertexType = "one line after another - down; order 1"

lineA = ((2,2),(1,1.5)) #ED

lineB = ((1,1.5),(2.5,0.5)) #DF

calcAngle(lineA, lineB,vertexType)

#flip lines order

vertexType = "one line after another - down; order 2"

lineB = ((2,2),(1,1.5)) #ED

lineA = ((1,1.5),(2.5,0.5)) #DF

calcAngle(lineA, lineB,vertexType)

vertexType = "one line after another - up; line order 1"

lineA = ((1,1.5),(2,2)) #DE

lineB = ((2.5,0.5),(1,1.5)) #FD

calcAngle(lineA, lineB,vertexType)

#flip lines order

vertexType = "one line after another - up; line order 2"

lineB = ((1,1.5),(2,2)) #DE

lineA = ((2.5,0.5),(1,1.5)) #FD

calcAngle(lineA, lineB,vertexType)

我写了一个很小的函数,它将行的组合作为args并计算它们之间的角度.我使用的math.atan2似乎最适合这个.

def calcAngle(lineA,lineB,vertexType):

line1Y1 = lineA[0][1]

line1X1 = lineA[0][0]

line1Y2 = lineA[1][1]

line1X2 = lineA[1][0]

line2Y1 = lineB[0][1]

line2X1 = lineB[0][0]

line2Y2 = lineB[1][1]

line2X2 = lineB[1][0]

#calculate angle between pairs of lines

angle1 = math.atan2(line1Y1-line1Y2,line1X1-line1X2)

angle2 = math.atan2(line2Y1-line2Y2,line2X1-line2X2)

angleDegrees = (angle1-angle2) * 360 / (2*math.pi)

print angleDegrees, vertexType

我得到的输出是:

> -299.744881297 same start point; order 1

> 299.744881297 same start point; order 2

> 60.2551187031 same end point; order 1

> -60.2551187031 same end point; order 2

> -119.744881297 one line after another - down; order 1

> 119.744881297 one line after another - down; order 2

> -119.744881297 one line after another - up; line order 1

> 119.744881297 one line after another - up; line order 2

如您所见,我将获得不同的值,具体取决于线段和线段顺序中的顶点顺序.我试图通过找出源线有什么样的关系和翻转线,编辑角度等来对角度进行后处理.我已经结束了十几个这样的情况,并且在某些时候它们开始重叠而且我不能再发现-119.744是否应该变成60.255(锐角)或者是119.744(钝角)等.

有没有任何离散的方法来处理我从math.atan2收到的输出角度值,只能获得0到180范围内的正值?如果没有,我应该采取什么样的其他方法?

如何用python画钝角三角形_使用math.atan2计算线段(Python)之间的角度相关推荐

  1. 用python画熊猫_熊猫read_excel()–用Python读取Excel文件

    用python画熊猫 We can use the pandas module read_excel() function to read the excel file data into a Dat ...

  2. python画饼图_百度飞桨PaddlePaddle之[Python小白逆袭大神]7天训练营

    第三次参加百度的7天训练营了 这次参加的主题是[Python小白逆袭大神],不过你别看是小白逆势...除非你一开始参加就逆袭完,不然你真的是python小白,这个课程还是有难难度的. 说一下个训练营的 ...

  3. python画椭圆形_手残党福音:用Python画出机器人Dev

    你知道下面这张图片中的角色是谁吗? 猜猜我是谁 我相信,只要你参加了2020年第二届国际青少年编程大赛,就一定认识它! 没错,它就是比赛中的主角,人见人爱的超级机器人Dev! 这个造型讨喜的机器人陪伴 ...

  4. 用python画桃花_武大樱花又盛开,用Python画一棵樱花树

    黑夜可能漫长,但总会迎来温暖的阳光,三月如期而至,武大的樱花又一次盛开.那么今天就一起来看看怎样在python中画一棵美丽的樱花树- 说到用python画画,那当然就是小乌龟Turtle库了,为啥是t ...

  5. 用python画机器人_手残党福音:用Python画出机器人Dev~

    今天带大家一起编写一个好玩的程序,你准备好了吗? 话不多说,让我们直接进去主题~ 你知道下面这张图片中的角色是谁吗?猜猜我是谁 猜猜我是谁我相信,只要你参加了2020年第二届国际青少年编程大赛,就一定 ...

  6. 用python画梅花_仅就作图而言,Python 和 MATLAB 有可比性吗?

    matplotlib单挑MATLAB的话,那就是钢铁侠单挑灭霸的场面. 整体来说matplotlib槽点不多,可控性比MATLAB高,default设置的审美水平也超过MATLAB,但就是docume ...

  7. Python灰帽子_黑客与逆向工程师的Python编程之道

    收藏自用 链接:Python灰帽子_黑客与逆向工程师的Python编程之道

  8. 用python画皇冠_【推荐】手把手教你如何用Python画一棵漂亮樱花树含源码

    最近给大家整理了一下,挑了一些我觉得不错的代码分享给大家手把手教你如何用Python画一棵漂亮樱花树含源码. 动态生成樱花 效果图(这个是动态的): import turtle as T import ...

  9. python 画云图_【词云图】如何用python的第三方库jieba和wordcloud画词云图

    一直想学一下如何用python画词云图,觉得很好玩,本文就写一下我自己的一些尝试. 1.提前准备 一般准备以下四样就可以啦. 第一,电脑安装python,我装的是3.6. 第二,安装第三方库jieba ...

最新文章

  1. LeetCode - 34. Search for a Range
  2. C++ 之new和delete释放内存
  3. python打开word并在前台显示_Python自动化办公之Word,全网最全看这一篇就够了
  4. 塑料:泡两天澡我就消失了?酶降解塑料居然可以这么快 | Nature
  5. 读取一个文件,获取其中出现次数最多的前五个字符以及次数
  6. 教育部:中小学生原则上不得将个人手机带入校园!不要相信手机对学习有帮助!
  7. 每日一水:HDOJ 1408 盐水的故事
  8. form表单用js提前执行函数若不成功则不提交_面试必会的重复提交 8 种解决方案!...
  9. Java学习笔记1.2.2 使用Java集成开发环境 - IntelliJ IDEA
  10. memcpy 作用(C++)
  11. 京东物流首架全货机首航 久未露面的刘强东还发声推广
  12. PHP FCKeditor2.5 解决上传图片问题
  13. 服务器接口文档详细 接口文档模板 规范 完整
  14. java基础-软件简述
  15. 华为历届笔试面试题整理大全
  16. 面试经常考的五个Sql查询
  17. VR火得不行 那么它商业化的突破点到底在哪里?
  18. 打开secpol.msc、gpedit.msc显示“试图引用不存在的令牌”,复制到其他目录可正常打开
  19. 网易2016研发工程师编程题--完全解析
  20. Pr:Lumetri 范围

热门文章

  1. 113条硬件工程师应用笔记
  2. 非暴力沟通:沟通场景
  3. tensorflow实现贴对联
  4. 爱Android更要懂Android
  5. SpringBoot+Vue实现第三方QQ登录(二)
  6. windws 8 应用小技巧(11-15)
  7. android饺子播放器屏幕全屏,记录一次 学习饺子播放器切换全屏播放原理
  8. Bootstrap屏幕缩小时在导航栏下生成滚动条
  9. 【美港探案】百德医疗招股进行时:底气十足,无需基石投资者
  10. elasticsearch高级功能系列之completion suggest