当前位置:网站首页>基础 | 在物理引擎中画圆弧
基础 | 在物理引擎中画圆弧
2022-06-29 15:49:00 【用户1097444】
作者|zzbozheng
原文|http://imweb.io/topic/5959aee62536e43f14da1a68
因为需求的需要,要使用在物理引擎中使用四分之一圆弧,我们来看看怎么实现在物理引擎中画出四分之一的圆弧,
在物理引擎中绘制圆弧
一般来说,物理引擎都是提供一般的画图方法,比如:circle(圆)、polygon(不规则多边形)、rectangle(矩形) 等图形,但如果需要画出比较灵活又不规则的图形的话,那么就需要使用 svg 提供支持了。下面来探讨一下如何实现四分之一圆弧: 我们来看一下svg中的path标签可用参数:
指令 | 参数 | 说明 |
|---|---|---|
M | x y | 将画笔移动到点(x,y) |
L | x y | 画笔从当前的点绘制线段到点(x,y) |
H | x | 画笔从当前的点绘制水平线段到点(x,y0) |
V | y | 画笔从当前的点绘制竖直线段到点(x0,y) |
A | rx ry x-axis-rotation large-arc-flag sweep-flag x y | 画笔从当前的点绘制一段圆弧到点(x,y) |
C | x1 y1, x2 y2, x y | 画笔从当前的点绘制一段三次贝塞尔曲线到点(x,y) |
S | x2 y2, x y | 特殊版本的三次贝塞尔曲线(省略第一个控制点) |
Q | x1 y1, x y | 绘制二次贝塞尔曲线到点(x,y) |
T | x y | 特殊版本的二次贝塞尔曲线(省略控制点) |
Z | 无参数 | 绘制闭合图形,如果d属性不指定Z命令,则绘制线段,而不是封闭图形。 |
可以们可以看到path标签的指令十分丰富功能也很强大,如果需要画圆弧,那么就是需要使用到A指令最合适不过了。 绘制圆弧指令:A rx ry x-axis-rotation large-arc-flag sweep-flag x y
具体可以理解为:
- 画一段到(x,y)的椭圆弧。 椭圆弧的 x, y 轴半径分别为 rx,ry。
- 椭圆相对于 x 轴旋转 x-axis-rotation 度。
- large-arc=0表明弧线小于180度,large-arc=1表示弧线大于180度。
- sweep=0表明弧线逆时针旋转, sweep=1表明弧线顺时间旋转。
说起来比较抽象,我们来看看下图
:
假如要画一个左下角的一个四分之一圆弧:
得出结果:
- M80 80 表示从画布的 x:80 y:80 开始画
- A45 45 表示椭圆的x半径长度为45px ,y 半径长度为45px。(这里都为45,那么就是圆形啦)
- 0 0 0 第一个0表示相对于x轴不旋转,第二个0表示只取弧线小于180那一段,第三个0表示逆时针画的那部分
- 125 125 表示圆弧的结束部分。
- L 128 80 Z 表示画直线到 x: 128 y: 80,Z 表示自动闭合路径。
从外形上来看像是一个外凸的圆弧,那么如果需要一个凹下去的圆弧那应该怎么实现呢?首先需要在脑海或纸上要有这么一幅图:
我们可以用上面的例子来稍作修改,弧还是我们需要的那段弧,只是直线的连接点不一样,那么我们只需要修改连接点可以了
如果要向右上角的小圆弧呢?其实就是需要顺时针的小弧,那么把上面的代码的 sweep-flag 部分改为1就可以了。
SVG到物理引擎的转换
因为我们这里使用的是matter.js 那么可以通过 matter.js 提供的方法 Svg.pathToVertices 来把svg转换为canvas路径。
扫码下方二维码,
随时关注更多前端干货文章!
▼
微信:IMWebTech
边栏推荐
- Differences between virtual hosts, WordPress hosts and virtual hosts
- 哪个版本的JVM最快?
- A. Beat The Odds
- 京东联盟API - 万能转链接口 - 京品库接口 - 接口定制
- mysql报错:Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column
- 面试官:说一下MySQL事务隔离级别?
- CVPR 2022 | 大幅减少零样本学习所需的人工标注,马普所和北邮提出富含视觉信息的类别语义嵌入
- Three development trends of enterprise application viewed from the third technological revolution
- three. JS and Gaode map are combined to introduce obj format model - effect demonstration
- The latest agenda of dtcc2022 China database technology conference was released
猜你喜欢

卫龙辣条第三次冲刺上市:业绩增速下滑,刘卫平、刘福平提前套现

硬件开发笔记(八): 硬件开发基本流程,制作一个USB转RS232的模块(七):创建基础DIP元器件(晶振)封装并关联原理图元器件
![leetcode:535. Encryption and decryption of tinyurl [mapping of URL and ID, ID self increment]](/img/16/6684eaadc949e27c66a742100cb8f8.png)
leetcode:535. Encryption and decryption of tinyurl [mapping of URL and ID, ID self increment]

支付宝“安全锁”入选信通院“护童计划”优秀案例:超过33万用户已开通游戏保护

Science:大脑中睡眠的相互关联原因和结果

天谋科技 Timecho 完成近亿元人民币天使轮融资,围绕 Apache IoTDB 打造工业物联网原生时序数据库
![leetcode:139. Word splitting [DFS + memory]](/img/6f/8936ed3579c6a6dc3d8d312b413aff.png)
leetcode:139. Word splitting [DFS + memory]

It is expected to significantly improve the computational performance of integrated photonic circuits. The Tsinghua team proposed a diffraction pattern neural network framework

When easygbs calls the interface for obtaining real-time snapshots, how to solve the problem of white squares?

Volcano engine was selected into the first "panorama of edge computing industry" in China
随机推荐
迪赛智慧数——其他图表(基本旭日图):毕业演讲高频词
Where has lifeifei reached in his key "embodied intelligence"?
天龙八部TLBB系列 - 网单用数据库修改为其他门派
2022-06-29日报: 李飞飞划重点的「具身智能」,走到哪一步了?
Mysql database foundation: DDL data definition language
虚拟主机、WordPress 主机和云主机之间的区别
发明了杀毒软件之后,他选择做一个极品混混
BS-GX-017基于SSM实现的在线考试管理系统
工具链赋能百家,地平线开启智能驾驶量产的“马太效应”
What are the advantages of intelligent chat robots? Senior independent station sellers tell you!
Differences between virtual hosts, WordPress hosts and virtual hosts
leetcode:42. 接雨水【双指针很优雅】
R语言plotly可视化:plotly可视化多个数据集归一化直方图(historgram)、设置不同的直方图使用不同的分箱大小(bin size)、在直方图的底部边缘添加边缘轴须图rug
DTCC2022 中国数据库技术大会最新议程出炉
对于产业互联网的认识,直接关系着我们究竟会以怎样的心态来看待它
【Try to Hack】XML
如何在 WordPress 中创建联系表格?
李飞飞划重点的「具身智能」,走到哪一步了?
【大家的项目】 Rbatis ORM官网上线
How do I create a contact form in WordPress?