本文目录一览:
- 1、python求两点间直线所有坐标值
- 2、如何用python按顺序获取一个线条组成的图形的点坐标
- 3、Python中的反三角函数求确定角度
- 4、python求两点直线坐标
- 5、Python OpenCV 霍夫(Hough Transform)直线变换检测原理,图像处理第 33 篇博客
- 6、关于用python画多边形的角度问题
python求两点间直线所有坐标值
#!/usr/bin/python
# encoding: utf-8
#
# filename: line.py
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return "(%d, %d)" % (self.x, self.y)
def line2(self, another):
if self.x == another.x:
step = 1 if self.y another.y else -1
y = self.y
while y != another.y:
yield Point(self.x, y)
y += step
elif self.y == another.y:
step = 1 if self.x another.x else -1
x = self.x
while x != another.x:
yield Point(x, self.y)
x += step
else:
d_x = self.x - another.x
d_y = self.y - another.y
s_x = 1 if d_x 0 else -1
s_y = 1 if d_y 0 else -1
if d_y:
delta = 1. * d_x / d_y
for i in xrange(0, d_x):
yield Point(self.x+i*s_x, self.y+i*s_x/delta)
elif d_x:
delta = 1. * d_y / d_x
for i in xrange(0, d_y):
yield Point(self.y+i*s_y/delta, self.y+i*s_y)
def tester():
pointA = Point(450, 649)
pointB = Point(326, 649)
print pointA, '~', pointB
for point in pointA.line2(pointB):
print "%s"%point
print "+"*32
pointA = Point(450, 649)
pointB = Point(450, 863)
print pointA, '~', pointB
for point in pointA.line2(pointB):
print "%s"%point
print "+"*32
pointA = Point(450, 649)
pointB = Point(326, 863)
print pointA, '~', pointB
for point in pointA.line2(pointB):
print "%s"%point
if __name__ == "__main__":
tester()
如何用python按顺序获取一个线条组成的图形的点坐标
1、首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版本以上不向下兼容,体验较差。
2、打开文本编辑器,推荐editplus,notepad等,将文件保存成 .py格式,editplus和notepad支持识别python语法。
脚本第一行一定要写上 #!usr/bin/python
表示该脚本文件是可执行python脚本
如果python目录不在usr/bin目录下,则替换成当前python执行程序的目录。
3、编写完脚本之后注意调试、可以直接用editplus调试。调试方法可自行百度。脚本写完之后,打开CMD命令行,前提是python 已经被加入到环境变量中,如果没有加入到环境变量,请百度
4、在CMD命令行中,输入 “python” + “空格”,即 ”python “;将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可。
Python中的反三角函数求确定角度
acos()方法返回x的反余弦值,以弧度表示。
以下是acos()方法的语法:acos(x)
注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数。x -- 这必须是在范围内的数字值-1到1,如果x大于1,则它会产生一个错误。
扩展资料
python运行的两种方式
1、命令行:python +需要执行的代码
特点:会立即看到效果,用于代码调试,写到内存中,不会永久保存
2、写到文件里面:python +执行文件的位置
特点:可以永久保存。
过程:
1、启动python解释器
2、将内容从硬盘读取到内存中
3、执行python代码
(再次强调:程序在未运行前跟普通文件无异,只有程序在运行时,文件内所写的字符才有特定的语法意义)
python求两点直线坐标
#判断斜率是否相等.
#即点(cx,cy)是不是在点(ax,ay)和点(bx,by)确定的直线上.
def issame(ax,ay,bx,by,cx,cy):
kac=(ax-cx)*(cy-by)
kbc=(cx-bx)*(ay-cy)
return kac==kbc
#获取点(ax,ay)和点(bx,by)确定的直线上所有的点的坐标
def getall(ax,ay,bx,by):
res=[]
for cx in range(500):
for cy in range(500):
if issame(ax,ay,bx,by,cx,cy):
res.append((cx,cy))
return res
#斜率为100的直线
print(getall(0,0,1,100))
结果:
[(0, 0), (1, 100), (2, 200), (3, 300), (4, 400)]
Python OpenCV 霍夫(Hough Transform)直线变换检测原理,图像处理第 33 篇博客
霍夫变换(Hough Transform)是图像处理领域中,从图像中识别几何形状的基本方法之一。主要识别具有某些相同特征的几何形状,例如直线,圆形,本篇博客的目标就是从黑白图像中识别出直线。
翻阅霍夫直线变换的原理时候,橡皮擦觉得原理部分需要先略过,否则很容易在这个地方陷进去,但是问题来了,这个原理略过了,直接应用函数,里面有些参数竟然看不懂。例如极坐标,角度扫描范围,这种函数就属于绕不过去的知识点了,所以本文转移方向,死磕原理,下面的博文将语无伦次的为你展示如何学习原理知识。
因为数学知识的贫乏,所以在学习阶段会涉及到很多基础概念的学习,一起来吧。
首先找到相对官方的资料,打开该 地址
下面是一个数学小白对原理的学习经验。
教材说:众所周知,一条直线在图像二维空间可由两个变量表示。
抱歉,小白还真不知道……即使学习过,这些年也早已经还给老师了。
一开始难道要学习笛卡尔坐标系,不,你低估小白的能力了,我第一个查询的是 θ 读作 西塔 ,是一个希腊字母。
什么是笛卡尔坐标系?
这个比较简单,直角坐标系。
斜率和截距
斜率,亦称“角系数”,表示一条直线相对于横坐标轴的倾斜程度。
一条直线与某平面直角坐标系横坐标轴正半轴方向的夹角的正切值即该直线相对于该坐标系的斜率。
如果直线与 x 轴互相垂直,直角的正切直无穷大,故此直线不存在斜率。
对于一次函数 y=kx+b , k 就是该函数图像的斜率。
在学习的时候,也学到如下内容:
截距:对 x 的截距就是 y=0 时, x 的值,对 y 的截距就是 x=0 时, y 的值,
截距就是直线与坐标轴的交点的横(纵)坐标。 x 截距为 a , y 截距 b ,截距式就是: x/a+y/b=1(a≠0且b≠0) 。
斜率:对于任意函数上任意一点,其斜率等于其切线与 x 轴正方向所成的角,即 k=tanα 。 ax+by+c=0中,k=-a/b 。
什么是极坐标系?
关于极坐标系,打开 百度百科 学习一下即可。
重点学到下面这个结论就行:
找资料的时候,发现一个解释的比较清楚的 博客 ,后续可以继续学习使用。
继续阅读资料,看到如下所示的图,这个图也出现在了很多解释原理的博客里面,但是图下面写了一句话
在这里直接蒙掉了,怎么就表示成极坐标系了?上面这个公式依旧是笛卡尔坐标系表示直线的方式呀,只是把 k 和 b 的值给替换掉了。
为何是这样的,具体原因可以参照下图。
centerchou 图/center
继续寻找关于霍夫变换的资料,找到一个新的概念 霍夫空间 。
在笛卡尔坐标系中,一条直线可以用公式 表示,其中 k 和 b 是参数,表示的是斜率和截距。
接下来将方程改写为 ,这时就建立了一个基于 k - b 的笛卡尔坐标系。
此时这个新的方程在 k - b 坐标系也有一个新的直线。
你可以在纸上画出这两个方程对应的线和点,如下图所示即可。
centerchou 图/center
新的 k - b 坐标系就叫做霍夫空间,这时得到一个结论,图像空间 x - y 中的点 对应了 霍夫空间 k - b 中的一条直线 ,即图像空间的点与霍夫空间的直线发生了对应关系。
如果在图像空间 x - y 中在增加一个点 ,那相应的该点在霍夫空间也会产生相同的点与线的对应关系,并且 A 点与 B 点产生的直线会在霍夫空间相交于一个点。而这个点的坐标值 就是直线 AB 的参数。
如果到这里你掌握了,这个性质就为我们解决直线检测提供了方法,只需要把图像空间的直线对应到霍夫空间的点,然后统计交点就可以达到目的,例如图像空间中有 3 条直线,那对应到霍夫空间就会有 3 个峰值点。
遍历图像空间中的所有点,将点转换到霍夫空间,形成大量直线,然后统计出直线交会的点,每个点的坐标都是图像空间直线方程参数,这时就能得到图像空间的直线了。
上述的内容没有问题,但是存在一种情况是,当直线趋近于垂直时,斜率 k 会趋近于无穷大,这时就没有办法转换了,解决办法是使用法线来表示直线。
上文提及的斜截式如下:
通过第二个公式,可以得到下述公式:
此时,我们可以带入一些数值进行转换。
图像空间有如下的几个点:
转换后的函数,都可以在霍夫空间 θ - ρ (横坐标是 θ ,纵坐标是 ρ )进行表示。
原理这时就比较清晰了:
除了一些数学知识以外,经典的博客我们也有必要记录一下,方便后面学习的时候,进行复盘。
本部分用于记录本文中提及的相关数学原理,后续还要逐步埋坑。
今天涉及了一点点数学知识,能力限制,大家一起学习,有错误的地方,可以在评论区指出,不胜感激。
希望今天的 1 个小时(今天内容有点多,不一定可以看完),你有所收获,我们下篇博客见~
相关阅读
技术专栏
逗趣程序员
关于用python画多边形的角度问题
这纯粹是一个几何的问题
假设每一个角的度数为a,作出图来,平行的关系就会变得清晰明了
具体的过程是做一条辅助线(图中的虚线),
可以用内错角相等的两条线平行,证明这条辅助线与两条边均平行
因此证明相隔两条线的两条线平行