资源简介
贝塞尔曲线拟合多边形,本来以为是很标准的算法,必然有Python的现成库存在,但搜了几天下来,竟然没有一个。
csdn上有一个版本,是基于某篇文章修改的python版本,但算法有错。
该文章的地址在此:https://blog.csdn.net/sky_pjf/article/details/52816750
我下载了此版本,并做了修改,现在上传的是正确的版本。
控制点的选取和实现思路,都是从该文章来的。
效果还比较好,希望对大家有帮助。
代码片段和文件信息
import numpy as np
import pylab as pl
import math
from functools import reduce
scale = 0.5 #控制点收缩系数
midpoints = [] #存放中点坐标
semipoints = []
extrapoints = [] #存放控制点
controlPoint = [] #存放产生贝塞尔曲线的4个控制点
point = [] #存放贝塞尔曲线上的点
nn = 3 #三次贝塞尔曲线
hand = np.array([[1.64516129 1.16145833]
[1.64516129 1.59375]
[1.35080645 1.921875]
[1.375 2.18229167]
[1.68548387 1.9375]
[1.60887097 2.55208333]
[1.68548387 2.69791667]
[1.76209677 2.56770833]
[1.83064516 1.97395833]
[1.89516129 2.75]
[1.9516129 2.84895833]
[2.01209677 2.76041667]
[1.99193548 1.99479167]
[2.11290323 2.63020833]
[2.2016129 2.734375]
[2.25403226 2.60416667]
[2.14919355 1.953125]
[2.30645161 2.36979167]
[2.39112903 2.36979167]
[2.41532258 2.1875]
[2.1733871 1.703125]
[2.07782258 1.16666667]])
#f = open(“xy.txt“)
def getOriginPoint():
global f
line=f.readline()
while line:
list = line.split(“ “)
list1 = []
for i in range(len(list)):
list1.append(float(list[i]))
originPoint.append(list1)
line=f.readline()
return originPoint
def getOriginPoint2():
for a in hand:
la= list(a)
# originPoint.append(la)
# originPoint= np.rot90(hand1)
originPoint= hand
#return originPoint
def getControlPoint():
originPoint = hand
originCount = len(originPoint)
print(originCount)
## originPoint.sort(key = lambda x:x[0])
## controlPoint.append(originPoint[0])
## keyPoint=[]
## originPoint.sort(key = lambda x:x[1]reverse=TRUE)
## keyPoint.append(originPoint[0])
#---------生成中点---------------
for i in range(0originCount):
nexti = (i + 1) % originCount
templist = []
templist.append((originPoint[i][0] + originPoint[nexti][0])/2.0)
templist.append((originPoint[i][1] + originPoint[nexti][1])/2.0)
midpoints.append(templist)
print(len(midpoints))
# print(midpoints)
#---------平移中点---------------
for i in range(0originCount):
# print(i)
nexti = (i + 1) % originCount
backi = (i+ originCount - 1) % originCount
ln1= math.sqrt((originPoint[i][0] - originPoint[nexti][0])**2 + (originPoint[i][1] - originPoint[nexti][1])**2)
ln2= math.sqrt((originPoint[backi][0] - originPoint[i][0])**2 + (originPoint[backi][1] - originPoint[i][1])**2)
t1= (ln1+ ln2)/ ln1
# print(t1)
midinmid = [] #存放中点的中点
x1= midpoints[i][0] - (midpoints[i][0] - midpoints[nexti][0])/t1
y1= midpoints[i][1] - (midpoi
相关资源
- python实现网络爬虫 爬取北上广深的天
- python3抓取头条新闻源码
- python.txt
- python版本selenium webdriver api
- _bz2.cpython-37m-x86_64-linux-gnu.so
- 树莓派与PC端在局域网内运用python实现
- Violent-Python-Source.zip
- python将矩形jpg图形批量裁剪为圆形图
- 彼岸网4K高清图片爬虫源代码
- gmpy2-2.0.8-cp38-cp38-win_amd64.whl
- 天天酷跑Python.docx
- python图像处理.rar
- cplex教程python
- python画图小程序
- Python袖珍指南Python Pocket Reference 第五
- LSSVM_python_example.zip
- python学生成绩管理系统.rar
- L1制导求加速度算法部分.py
- [计算方法作业]利用python中matplotlib实
- [计算方法作业]利用python中matplotlib实
- 利用python中matplotlib库实现绘制(随机
- 全景图像拼接python+opencv
- 复旦大学人工智能N-Queens答案
- 100个经典Python
- python操作同花顺客户端下单程序
- opemv4-0v7725.rar
- FaceClustering.zip
- python 利用OpenCV 图像黑白化
- PythonTCP编程
- 《python常见图形代码可视化大全整理
评论
共有 条评论