【SDU Chart Team - Core】一些预置点函数
一些预置点函数
变换
相同坐标系下,由一个点到另一个点。
线性变换
给定一个2×22\times 22×2的方阵MMM,然后对点进行该变换。
p′=Mpp'=Mpp′=Mp
直线对称
给定两个点a,ba,ba,b定一条直线,然后找到点相对于该直线的对称点。
首先得到ab→=b−a=(xb−xa,yb−ya)\overrightarrow{ab}=b-a=(x_b-x_a,y_b-y_a)ab=b−a=(xb−xa,yb−ya),由于对称与直线方向无关,取x轴分量≥0\ge 0≥0的方向,得到新的向量v→=(dx,dy)\overrightarrow{v}=(dx, dy)v=(dx,dy)。
如果dx=0dx=0dx=0,则关于y轴对称。
p′=(2xa−xp,yp)p'=(2x_a-x_p,y_p)p′=(2xa−xp,yp)如果dy=0dy=0dy=0,则关于x轴对称。
p′=(xp,2ya−yp)p'=(x_p,2y_a-y_p)p′=(xp,2ya−yp)否则,进行如下运算
首先计算该直线的方程,易得:
xdy−ydx+(yadx−xady)=0xdy-ydx+(y_adx-x_ady)=0xdy−ydx+(yadx−xady)=0
点到直线的距离为:
D=∣xpdy−ypdx+(yadx−xady)∣dx2+dy2D=\frac{|x_pdy-y_pdx+(y_adx-x_ady)|}{\sqrt{dx^2+dy^2}}D=dx2+dy2∣xpdy−ypdx+(yadx−xady)∣
直线的垂直方向为:
- 点在直线上方,即xpdy−ypdx+(yadx−xady)<0x_pdy-y_pdx+(y_adx-x_ady)<0xpdy−ypdx+(yadx−xady)<0,则为(1dy,−1dx)(\frac{1}{dy}, -\frac{1}{dx})(dy1,−dx1)
- 反之,则为(−1dy,1dx)(-\frac{1}{dy}, \frac{1}{dx})(−dy1,dx1)
新的点的位置:
xp′=xp±2D1dy(1dx)2+(1dx)2=xp±2dx(xpdy−ypdx+(yadx−xady))dx2+dy2yp′=yp∓2D1dx(1dx)2+(1dx)2=yp∓2dy(xpdy−ypdx+(yadx−xady))dx2+dy2\begin{array}{ll}x_{p'}&=x_p±2D\frac{\frac{1}{dy}}{\sqrt{(\frac{1}{dx})^2+(\frac{1}{dx})^2}}\\&=x_p±2\frac{dx(x_pdy-y_pdx+(y_adx-x_ady))}{dx^2+dy^2}&\end{array}\\\begin{array}{ll}y_{p'}&=y_p\mp2D\frac{\frac{1}{dx}}{\sqrt{(\frac{1}{dx})^2+(\frac{1}{dx})^2}}\\&=y_p\mp2\frac{dy(x_pdy-y_pdx+(y_adx-x_ady))}{dx^2+dy^2}&\end{array}xp′=xp±2D(dx1)2+(dx1)2dy1=xp±2dx2+dy2dx(xpdy−ypdx+(yadx−xady))yp′=yp∓2D(dx1)2+(dx1)2dx1=yp∓2dx2+dy2dy(xpdy−ypdx+(yadx−xady))
化简之,令e=xpdy−ypdx+(yadx−xady)e=x_pdy-y_pdx+(y_adx-x_ady)e=xpdy−ypdx+(yadx−xady),则:
p′=(xp−2edxdx2+dy2,yp+2edydx2+dy2)p'=(x_p-2\frac{edx}{dx^2+dy^2}, y_p+2\frac{edy}{dx^2+dy^2})p′=(xp−2dx2+dy2edx,yp+2dx2+dy2edy)
中心对称
给定一个对称中心点ccc,找到点关于该点的对称点。
p′=2c−pp'=2c-pp′=2c−p
中心缩放
给定一个缩放中心点ccc,找到点关于该点以缩放比为λ\lambdaλ的缩放后的点。
p′=c+λ(p−c)p'=c+\lambda(p-c)p′=c+λ(p−c)
中心旋转
将点相对旋转中心点ccc顺时针旋转θ\thetaθ弧度。相当于进行如下线性变换:
M=(cosθsinθ−sinθcosθ)M=\left(\begin{matrix}\cos{\theta}&\sin{\theta}\\-\sin{\theta}&\cos{\theta}\end{matrix}\right)M=(cosθ−sinθsinθcosθ)
中心
相同坐标系下的若干个点,计算其某个中心。
几何中心
找到所有点的几何中心,通过算术平均。
p′=(∑inxin,∑inyin)p' = (\frac{\sum_i^n x_i}{n}, \frac{\sum_i^n y_i}{n})p′=(n∑inxi,n∑inyi)
多边形质心
设所有点依次连接为封闭多边形,则可以算出其多边形质心。
A=12∑i=0n−1(xiyi+1−xi+1yi)px=16A∑i=0n−1(xi+xi+1)(xiyi+1−xi+1yi)py=16A∑i=0n−1(yi+yi+1)(xiyi+1−xi+1yi)A=\frac{1}{2}\sum_{i=0}^{n-1}(x_iy_{i+1}-x_{i+1}y_i)\\p_x = \frac{1}{6A}\sum_{i=0}^{n-1}(x_i+x_{i+1})(x_iy_{i+1}-x_{i+1}y_i)\\p_y = \frac{1}{6A}\sum_{i=0}^{n-1}(y_i+y_{i+1})(x_iy_{i+1}-x_{i+1}y_i)A=21i=0∑n−1(xiyi+1−xi+1yi)px=6A1i=0∑n−1(xi+xi+1)(xiyi+1−xi+1yi)py=6A1i=0∑n−1(yi+yi+1)(xiyi+1−xi+1yi)
力平衡点
给定一组点,以及点处施加的力的大小,计算最后的力平衡点。
通过迭代的方式,反复向合力方向移动ηi\eta_iηi,其中ηi=loss(ηi−1)\eta_i=loss(\eta_{i-1})ηi=loss(ηi−1)。当某次迭代中求出的合力小于1e−41e^{-4}1e−4时停止。
坐标系转换
将点从它所在的坐标系转换为另一个坐标系。详见《几种坐标系定义与坐标系转换》。
【SDU Chart Team - Core】一些预置点函数相关推荐
- iOS8 Core Image In Swift:更复杂的滤镜
iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift:更复杂的滤镜 iOS8 Core Image In Swift:人脸 ...
- iOS Core Image 复杂的滤镜
在上一篇中几乎没有对滤镜进行更复杂的操作,都是直接把inputImage扔给CIFilter而已,而Core Image实际上还能对滤镜进行更加细粒度的控制,我们在新的工程中对其进行探索.为此,我重新 ...
- 提高 Kubernetes 中的 GPU 利用率
提高 Kubernetes 中的 GPU 利用率 对于可扩展的数据中心性能,NVIDIA GPU 已成为必备品. 由数千个计算内核支持的 NVIDIA GPU 并行处理能力对于加速不同行业的各种应用程 ...
- Eclipse闪退/打不开/无法启动/一闪而过
解决方式: 1.通过在命令行中输入"where java",找到除jdk目录下的所有java相关程序,直接删掉(一般会在C:\WINDOWS\system32下) 2.内存不足,打 ...
- 32.ExtJS简单的动画效果
转自:http://blog.sina.com.cn/s/blog_74684ec501015lhq.html 说明:这篇文章的大部分内容来源于网上,经过自己实现其效果后,整理如下: 在进行 Java ...
- Magento调用静态块 static block
2019独角兽企业重金招聘Python工程师标准>>> 静态块(static block),仅包含一些静态的html内容,不涉及数据库存取,比如像:一些文字和图片链接,网站页脚部分等 ...
- 从零开始通过 Artifactory 搭建公网的 maven 仓库
来自我的 Blog Danny's Dream 起因 最近在给公司的 SDK ,做一个 maven 的仓库,方便 CP 嵌入.花了整两天的时间,身为移动开发的我之前没怎么接触过服务器相关的内容,这里做 ...
- Eclipse启动无响应,停留在Loading workbench状态
转自:http://www.jems.me/blog/web/115-eclipse-starting-halted-when-loading-workbench.html 前两天休眠后机器非正常关机 ...
- Eclipse启动无响应 停留在Loading workbench状态的解决办法
为什么80%的码农都做不了架构师?>>> Eclipse启动无响应 停留在Loading workbench状态 前两天休眠后机器非正常关机,重新启动后运行eclipse . ...
最新文章
- 使用vim保存权限不够的文件
- 修改wireshark协议解析规则
- java游戏西门大官人_valueOf()方法的使用
- anaconda下载的python在哪_python包管理器anaconda介绍安装和使用
- C#注册类方法到Lua
- jQuery标题文字淡入淡出显示效果
- 做对的事情远比把事情做对重要得多
- python调用百度地图实现路径规划提取坐标点
- Lae程序员小漫画,仅供一乐!
- 一个程序员的减肥方法(男女通用); 饮食+运动
- android wifi tethering,新增Wi-Fi/USB Tethering功能
- 新入职一家公司如何快速进入工作状态
- 7-6 符号配对 (20 分)(C语言版)
- BZOJ3713: [PA2014]Iloczyn
- 无法获得计算机管理权限,技巧:Windows系统如何获得管理员权限?
- C和C++中的register变量和volatile变量理解
- springboot启动时,排除某些自动配置类
- 从语义分析到操作系统,图灵机器人明年就能走进你家?
- 中国首位 K8s ingress-nginx reviewer 同时提名成为 Apache APISIX committer
- DL4J中文文档/开始/速查表