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中pygame模块用法实例
Oct 09 Python
Python之父谈Python的未来形式
Jul 01 Python
Python实现的下载网页源码功能示例
Jun 13 Python
python自动化报告的输出用例详解
May 30 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
python如何通过pyqt5实现进度条
Jan 20 Python
python实现拼接图片
Mar 23 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
pytorch实现ResNet结构的实例代码
May 17 Python
Python实现数据的序列化操作详解
Jul 07 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
PHPMailer邮件发送的实现代码
2013/05/04 PHP
php class类的用法详细总结
2013/10/17 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
Prototype Selector对象学习
2009/07/23 Javascript
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
几个Linux面试题笔试题
2012/12/01 面试题
办公室前台岗位职责
2014/01/04 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
尝试使用Python爬取城市租房信息
2022/04/12 Python
PYTHON InceptionV3模型的复现详解
2022/05/06 Python