python 已知平行四边形三个点,求第四个点的案例


Posted in Python onApril 12, 2020

我就废话不多说了,大家还是直接看代码吧!

import numpy as np
#已知平行四边形三个点,求第四个点
#计算两点之间的距离
def CalcEuclideanDistance(point1,point2):
  vec1 = np.array(point1)
  vec2 = np.array(point2)
  distance = np.linalg.norm(vec1 - vec2)
  return distance
#计算第四个点
def CalcFourthPoint(point1,point2,point3): #pint3为A点
  D = (point1[0]+point2[0]-point3[0],point1[1]+point2[1]-point3[1])
  return D
#三点构成一个三角形,利用两点之间的距离,判断邻边AB和AC,利用向量法以及平行四边形法则,可以求得第四个点D
def JudgeBeveling(point1,point2,point3):
  dist1 = CalcEuclideanDistance(point1,point2)
  dist2 = CalcEuclideanDistance(point1,point3)
  dist3 = CalcEuclideanDistance(point2,point3)
  dist = [dist1, dist2, dist3]
  max_dist = dist.index(max(dist))
  if max_dist == 0:
    D = CalcFourthPoint(point1,point2,point3)
  elif max_dist == 1:
    D = CalcFourthPoint(point1,point3,point2)
  else:
    D = CalcFourthPoint(point2,point3,point1)
  return D
 
print(JudgeBeveling((0,1),(1,0),(1,1)))
print(JudgeBeveling((5,39),(500,35),(496,17)))

补充知识:计算图像中任意四个点连成的四边形面积与Ground truth的IOU(Python)

1.先求任意四个点连成四边形的面积

这个问题可以用下面的图简单的看一下

python 已知平行四边形三个点,求第四个点的案例

图像的坐标如上图所示,大致的想法就是四个点可以确定四条线,然后进行判断,在红色区域中则为面积中的一个像素,否则不在。先求四条线的斜率

def line_slope(x1,y1,x2,y2,x3,y3,x4,y4):
    k1=(y2-y1)/(x2-x1)
    k2=(y3-y2)/(x3-x2)
    k3=(y4-y3)/(x4-x3)
    k4=(y1-y4)/(x1-x4)
    return k1,k2,k3,k4

然后计算每个位置上的各个函数值

l1=int(tk1*(i-tx1)+ty1)
        l2=int(tk2*(i-tx2)+ty2)
        l3=int(tk3*(i-tx3)+ty3)
        l4=int(tk4*(i-tx4)+ty4)

判断条件很重要,因为左边是那样排列的,所以判断条件就是

(l1<=j)&(l2>=j)&(l3>=j)&(l4<=j)

也就是在红色区域中任取一点都满足这个条件。定义一个全局变量,满足条件就+1。面积就求出来了。

其实求面积并不是我的目的

2.求相交的面积

python 已知平行四边形三个点,求第四个点的案例

两个面积分别求出来以后,两个面积的交集面积最简单的可以通过对照两个区域的坐标进行求解。

也就是在分别计算两个面积的时候记下符合条件的坐标(x,y)存放到数组中,最后比较两个数组中相等的元素的个数即可求解。

3.并面积

交的面积计算完后,可以用下面的公式(S1:四边形1的面积、S2:四边形2的面积、iu:交面积)

并面积=S1-iu+S2

4.IOU

交面积/并面积

5.测试

(1)

python 已知平行四边形三个点,求第四个点的案例

(2)

python 已知平行四边形三个点,求第四个点的案例

(3)

python 已知平行四边形三个点,求第四个点的案例

可以看到最后一种情况红框已经把ground truth包含了,所以可以直接用S2/S1来检验算法的准确性

而13882/19307=0.719013829181126,可以证明算法的准确性。

测试代码:链接

和别的算法进行比较

还是有区别的。。。

v2是向量方法计算

v3是shapely包计算

以上这篇python 已知平行四边形三个点,求第四个点的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python获取赶集网招聘信息前篇
Apr 18 Python
python 基础教程之Map使用方法
Jan 17 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
Aug 19 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 Python
Django实现任意文件上传(最简单的方法)
Jun 03 Python
基于opencv实现简单画板功能
Aug 02 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
python递归函数用法详解
Oct 26 Python
python 已知三条边求三角形的角度案例
Apr 12 #Python
python实现输入三角形边长自动作图求面积案例
Apr 12 #Python
Python3如何判断三角形的类型
Apr 12 #Python
Python判断三段线能否构成三角形的代码
Apr 12 #Python
Python 实现打印单词的菱形字符图案
Apr 12 #Python
python 使用while循环输出*组成的菱形实例
Apr 12 #Python
Python利用for循环打印星号三角形的案例
Apr 12 #Python
You might like
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
jquery 学习之二 属性相关
2010/11/23 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
Python正则表达式使用范例分享
2016/12/04 Python
python实现log日志的示例代码
2018/04/28 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
Python实现粒子群算法的示例
2021/02/14 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
美工的岗位职责
2013/11/14 职场文书
公益活动邀请函
2014/02/05 职场文书
物资采购管理制度
2015/08/06 职场文书
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL