在unity向量空间内绘制几何(1):通过将极坐标转换为直角坐标,绘制阿基米德螺线,对数螺线与玫瑰线等几何图形
一些基础几何图形的极坐标公式
极坐标内的每个点都有两个参数: r, 与 θ\thetaθ。r为此点到极点(中心点)的距离,θ\thetaθ 为此点到极点的线段与极轴(类似x轴)的夹角。
很多几何图形公式都可以用极坐标简洁的表示,例如:
阿基米德螺旋线:(公式1) r=a+b*θ\thetaθ
对数螺旋线:(公式2)r=a∗eb∗θr=a*e^{b*\theta}r=a∗eb∗θ
心脏线:(公式3)r=a(1−sin∗θ)r=a(1-\sin*\theta)r=a(1−sin∗θ)
玫瑰线:(公式4)r=cos(k∗θ)+cr=\cos(k*\theta)+cr=cos(k∗θ)+c
以上公式中的a,b,c,k都是常数,可以用来控制图形的形状。
已知了r 与 θ\thetaθ 的关系,那么只要依次算出θ\thetaθ从0至2π\piπ相对应的r值,我们就能得出一个连续的极坐标(r, θ\thetaθ)数组。
极坐标与直角坐标的转换函数
直角坐标xy与r,θ\thetaθ的关系:
公式5:
x=r∗cos(θ)x=r*\cos(\theta)x=r∗cos(θ)
y=r∗sin(θ)y=r*\sin(\theta)y=r∗sin(θ)
尝试将公式5与各极坐标公式结合:
public Vector3[] GeneratePolarRoses(int points,Vector3 centre,float k,float c,float scale){Vector3[] coordinates=new Vector3[points]; //将2π均分为points份,并依次赋予thetafloat theta=2f*Mathf.PI/points;float radius;for(int t=0;t<points;t++){//公式4转换为代码,算出theta从0至2π每个角度的r值radius=Mathf.Cos(k*theta)+c;//公式5转换为代码,既是将极坐标转换为直角坐标coordinates[t]=new Vector3(scale*radius*Mathf.Cos(theta)+centre.x,scale*radius*Mathf.Sin(theta)+centre.y,0f);theta+=2f*Mathf.PI/points;}return coordinates;}
该函数将会返回一个玫瑰线坐标点数组,参数points为返回的数组长度,centre为图形中心点位置坐标。参数k必须为整数,当为奇数时,花瓣数量为k,当为偶数时,花瓣数量为2k。参数c也会影响图形形状,当为0-1之间时,将会产生类似花蕊的效果。参数scale可以设置图形整体大小。
下面生成阿基米德螺旋线与对数螺旋线的函数的思路与玫瑰线基本相同,唯一不同的是增加了一个参数circles可以设置螺旋的圈数:
public Vector3[] GenerateArchimedeanSpirals(int points,Vector3 centre,int circles,float a,float b){Vector3[] coordinates=new Vector3[points]; float radius;//调整角度的分配模式,circles为螺旋的圈数float theta=2f*Mathf.PI/points*circles;for(int t=0;t<points;t++){//公式1radius=a+b*theta; //公式5 coordinates[t]=new Vector3(radius*Mathf.Cos(theta)+centre.x,radius*Mathf.Sin(theta)+centre.y,0f);theta+=2f*Mathf.PI/points*circles;}return coordinates;}
对数螺线:
public Vector3[] GenerateLogarithmicSpirals(int points,Vector3 centre,int circles,float a,float b){Vector3[] coordinates=new Vector3[points]; float radius;float theta=2f*Mathf.PI/points*circles;for(int t=0;t<points;t++){//公式2radius=a*Mathf.Exp(b*theta);coordinates[t]=new Vector3(radius*Mathf.Cos(theta)+centre.x,radius*Mathf.Sin(theta)+centre.y,0f);theta+=2f*Mathf.PI/points*circles;scales[t]=radius;}return coordinates;}
GenerateLogarithmicSpirals效果图,a为0.1,b为0.1,共13圈的对数螺线,每个坐标点放置了不同scale的UI图。
在unity向量空间内绘制几何(1):通过将极坐标转换为直角坐标,绘制阿基米德螺线,对数螺线与玫瑰线等几何图形相关推荐
- 强大的Python-使用NumPy和Matplotlib绘制数学(双纽线,阿基米德螺线,心形线)
强大的Python-使用NumPy和Matplotlib绘制数学(双纽线,阿基米德螺线,心形线) NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度 ...
- 考研数学——Python绘制极坐标图,画笛卡尔心形线、玫瑰线、阿基米德螺线、伯努利双纽线(加深图像理解)
<张宇基础30讲>第一讲的几张极坐标图象,这里用Python来实现一下,加深理解,并学习绘制极坐标图像. 1.笛卡尔心形线 公式: import numpy as np import ma ...
- Matplotlib复习(1)——绘制三角函数曲线、正态分布曲线、圆锥曲线、极坐标方程(心形线、玫瑰线、阿基米德螺线)、3D图(球、马鞍面)
文章目录 0 前置 1 基础API--绘制三角函数曲线 2 图例.注释.文本--绘制正态分布曲线 3 轮廓--绘制圆锥曲线 4 绘制极坐标方程(心形线.玫瑰线.阿基米德螺线) 5 3D图(球.马鞍面) ...
- python画笛卡尔心形线方程_考研数学——Python绘制极坐标图,画笛卡尔心形线、玫瑰线、阿基米德螺线、伯努利双纽线(加深图像理解)...
<张宇基础30讲>第一讲的几张极坐标图象,这里用Python来实现一下,加深理解,并学习绘制极坐标图像. 1.笛卡尔心形线 公式: import numpy as np import ma ...
- 在Matlab中绘制阿基米德螺线
1.数学表达式 阿基米德螺线(Archimedean spiral),亦称"等速螺线".当一点P沿动射线OP以等速率运动的同时,这射线又以等角速度绕点O旋转,点P的轨迹称为&quo ...
- lisp语言画阿基米德线_如何用VB语言Line方法绘制阿基米德螺线
展开全部 我是用picturebox实现的 (1)先用打开notepad,粘贴下面e69da5e887aa3231313335323631343130323136353331333236393832的 ...
- AutoCAD LISP 绘制阿基米德螺线曲线
螺线方程 r = a + b*theta 代码 (defun c:luoxuan (/)(setq a (getint "请输入a值: "))(setq d (getint &qu ...
- 在unity向量空间内绘制几何(2):计算球体的表面坐标
上一篇文章:在unity向量空间内通过将极坐标转换为直角坐标,绘制阿基米德螺线,对数螺线与玫瑰线等几何图形,研究了如何通过极坐标寻找2D平面中一些几何图形上的连续坐标点. 今天进一步研究一下如何获取一 ...
- 【Unity】绘制阿基米德螺旋线
阿基米德螺线定义: 阿基米德螺旋线公式: 极坐标方程为: r = a + bθ 平面笛卡尔坐标方程式为: x = (a + bθ)cos(θ), y = (a + bθ)sin(θ) a: 当θ=0° ...
最新文章
- 德国电信:5G有重复3G命运的风险!
- [解题报告] The Collatz Sequence
- 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自己主动适应宽带高度...
- halcon Bit图位像素处理算子,持续更新
- C#中的几个实用的代码
- 感谢前任程序员赏饭吃!
- wordpress开放注册_WordPress.com开源,欧洲开放数据门户网站以及更多新闻
- SequoiaDB 系列源码分析调整
- hadoop2.6.2分布式环境搭建
- java转换 HTML字符实体,java特殊字符转义字符串
- 一种语音识别的自动控制系统及方法与流程
- netsh命令使用详解
- 大数据与商业地理分析
- SQL Server 自增字段归零等问题
- Linq专题之提高编码效率—— 第三篇 你需要知道的枚举类
- Vbs脚本编程简明教程之六
- 华为荣耀3C彻底root的方法
- cd linux安装到u盘,安装 CDLinux 到移动硬盘或U盘
- 本周最新文献速递20211219
- 你真的理解了MVC, MVP, MVVM吗?