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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
基于python的Tkinter编写登陆注册界面
Jun 30 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
Python 给下载文件显示进度条和下载时间的实现
Apr 02 Python
在TensorFlow中实现矩阵维度扩展
May 22 Python
python的pip有什么用
Jun 17 Python
python实现跨年表白神器--你值得拥有
Jan 04 Python
python多线程方法详解
Jan 18 Python
Python Pandas解析读写 CSV 文件
Apr 11 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
服务器web工具 php环境下
2010/12/29 PHP
php中session使用示例
2014/03/29 PHP
jquery 简单的进度条实现代码
2010/03/11 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
Python实现的石头剪子布代码分享
2014/08/22 Python
python操作mysql数据库
2017/03/05 Python
基于python实现KNN分类算法
2020/04/23 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
HTML5标签大全
2016/11/23 HTML / CSS
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
经典演讲稿范文
2013/12/30 职场文书
学校运动会广播稿
2014/10/11 职场文书
单位单身证明样本
2014/10/11 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
手机销售员岗位职责
2015/04/11 职场文书
火烧圆明园观后感
2015/06/03 职场文书
负责培养人意见
2015/06/05 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书