python实现一个点绕另一个点旋转后的坐标


Posted in Python onDecember 04, 2019

如下所示:

(x,y)为要转的点,(pointx,pointy)为中心点,如果顺时针角度为angle

srx = (x-pointx)*cos(angle) + (y-pointy)*sin(angle)+pointx

sry = (y-pointy)*cos(angle) - (x-pointx)*sin(angle)+pointy

(x,y)为要转的点,(pointx,pointy)为中心点,如果逆时针角度为angle

nrx = (x-pointx)*cos(angle) - (y-pointy)*sin(angle)+pointx

nry = (x-pointx)*sin(angle) + (y-pointy)*cos(angle)+pointy

python实现一个点绕另一个点旋转后的坐标

python实现一个点绕另一个点旋转后的坐标

import numpy as np
import math
import matplotlib.pyplot as plt
# 绕pointx,pointy逆时针旋转
def Nrotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 nRotatex = (valuex-pointx)*math.cos(angle) - (valuey-pointy)*math.sin(angle) + pointx
 nRotatey = (valuex-pointx)*math.sin(angle) + (valuey-pointy)*math.cos(angle) + pointy
 return nRotatex, nRotatey
# 绕pointx,pointy顺时针旋转
def Srotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 sRotatex = (valuex-pointx)*math.cos(angle) + (valuey-pointy)*math.sin(angle) + pointx
 sRotatey = (valuey-pointy)*math.cos(angle) - (valuex-pointx)*math.sin(angle) + pointy
 return sRotatex,sRotatey
pointx = 1
pointy = 1
sPointx ,sPointy = Nrotate(math.radians(45),pointx,pointy,0,0)
print(sPointx,sPointy)
plt.plot([0,pointx],[0,pointy])
plt.plot([0,sPointx],[0,sPointy])
plt.xlim(-3.,3.)
plt.ylim(-3.,3.)
plt.xticks(np.arange(-3.,3.,1))
plt.yticks(np.arange(-3.,3.,1))
plt.show()

python实现一个点绕另一个点旋转后的坐标

import numpy as np
import math
import matplotlib.pyplot as plt
# 绕pointx,pointy逆时针旋转
def Nrotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 nRotatex = (valuex-pointx)*math.cos(angle) - (valuey-pointy)*math.sin(angle) + pointx
 nRotatey = (valuex-pointx)*math.sin(angle) + (valuey-pointy)*math.cos(angle) + pointy
 return nRotatex, nRotatey
# 绕pointx,pointy顺时针旋转
def Srotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 sRotatex = (valuex-pointx)*math.cos(angle) + (valuey-pointy)*math.sin(angle) + pointx
 sRotatey = (valuey-pointy)*math.cos(angle) - (valuex-pointx)*math.sin(angle) + pointy
 return sRotatex,sRotatey
 
x1 = np.array([1,2,3])
y1 = np.array([1,2,3])
x2 = np.array([3,6])
y2 = np.array([2,1])
# x2往x1上拼
disx = x2[0]-x1[0]
disy = y2[0]-y1[0]
removeX2 = x2-disx
removeY2 = y2-disy
tany1 = y1[-1]-y1[0]
tanx1 = x1[-1]-x1[0]
angle1 = math.degrees(np.arctan(tany1/tanx1))
tany2 = y2[-1]-y2[0]
tanx2 = x2[-1]-x2[0]
angle2 = math.degrees(np.arctan(tany2/tanx2))
disAngle = angle2-angle1
print(angle1)
print(angle2)
print(disAngle)
if disAngle<0:
 rotateX,rotateY = Nrotate(math.radians(abs(disAngle)),removeX2,removeY2,x1[0],y1[0])
else:
 rotateX,rotateY = Srotate(math.radians(abs(disAngle)),removeX2,removeY2,x1[0],y1[0])
plt.plot(x1,y1,color='red')
plt.plot(removeX2,removeY2,color='green')
plt.scatter(rotateX,rotateY,color='yellow')
plt.xlim(0.,10.)
plt.ylim(0.,10.)
plt.xticks(np.arange(0.,10.,1))
plt.yticks(np.arange(0.,10.,1))
plt.show()

python实现一个点绕另一个点旋转后的坐标

以上这篇python实现一个点绕另一个点旋转后的坐标就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python运用于数据分析的简单教程
Mar 27 Python
Python中使用装饰器时需要注意的一些问题
May 11 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
Python 异常处理的实例详解
Sep 11 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
May 16 Python
增大python字体的方法步骤
Jul 05 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 Python
Django配置文件代码说明
Dec 04 #Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 #Python
在Django下创建项目以及设置settings.py教程
Dec 03 #Python
Django自带的加密算法及加密模块详解
Dec 03 #Python
python Opencv计算图像相似度过程解析
Dec 03 #Python
django 中使用DateTime常用的时间查询方式
Dec 03 #Python
在django中自定义字段Field详解
Dec 03 #Python
You might like
浅析PHP水印技术
2007/02/14 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
php摘要生成函数(无乱码)
2012/02/04 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
JS中的多态实例详解
2017/10/15 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
详解如何设置Python环境变量?
2019/05/13 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
python集合的新增元素方法整理
2020/12/07 Python
Python 里最强的地图绘制神器
2021/03/01 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
求职自荐书范文
2013/12/04 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js