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实现保存网页到本地示例
Mar 16 Python
利用Python实现图书超期提醒
Aug 02 Python
python flask安装和命令详解
Apr 02 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
Python新手学习标准库模块命名
May 29 Python
python 实现图像快速替换某种颜色
Jun 04 Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 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学习笔记之 函数声明(二)
2011/06/09 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
php 购物车完整实现代码
2014/06/05 PHP
php操作redis缓存方法分享
2015/06/03 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
python登录并爬取淘宝信息代码示例
2017/12/09 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
python进度条显示之tqmd模块
2020/08/22 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
Linux操作面试题
2012/05/16 面试题
计算机网络专业自荐书
2014/06/09 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
2014年班务工作总结
2014/12/02 职场文书
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB