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 while 循环使用的简单实例
Jun 08 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
解决Django后台ManyToManyField显示成Object的问题
Aug 09 Python
如何在Cloud Studio上执行Python代码?
Aug 09 Python
Python猴子补丁知识点总结
Jan 05 Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 Python
Python 面向对象部分知识点小结
Mar 09 Python
Django+RestFramework API接口及接口文档并返回json数据操作
Jul 12 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
python实现MD5进行文件去重的示例代码
Jul 09 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许愿墙模块功能分析
2013/06/25 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
javascript实现数独解法
2015/03/14 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
python处理中文编码和判断编码示例
2014/02/26 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
python 重命名轴索引的方法
2018/11/10 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
python对XML文件的操作实现代码
2020/03/27 Python
python Selenium 库的使用技巧
2020/10/16 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
大学生村官承诺书
2014/03/28 职场文书
生态养殖创业计划书
2014/05/06 职场文书
本科应届生自荐信
2014/06/29 职场文书
公司股份合作协议书
2014/12/07 职场文书
优秀员工演讲稿
2019/06/21 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python