javascript - 用圆形SVG绘制一组内接的菱形
问题描述
我有多个<g>
元素,它们都有一个圆圈:
<g class="my-group">
<circle r="40" cx="10" cy="10"></circle>
</g>
在某些情况下,我需要绘制rectange
圆角而不是circle
,它应该呈现为菱形。我正在尝试像这样绘制它:
<g class="my-group">
<rect x="-16" y="-30" width="60" height="60" fill="red" transform="rotate(45)" rx="4"></rect>
</g>
但这是硬编码coordinates
和width
/height
的错误方法。
我如何计算width
和height
旋转矩形以将其内接成圆形,因此 group 将具有相同的 width 和 height 80px
。
解决方案
简单的勾股定理。矩形宽度(或斜边)等于两批半径平方的平方根。
const radius = document.querySelector('#circle').getAttribute('r')
const rectWidth = Math.sqrt(radius * radius * 2)
const square = document.querySelector('#square')
square.setAttribute('x', -rectWidth/2 + 'px')
square.setAttribute('y', -rectWidth/2 + 'px')
square.setAttribute('width', rectWidth + 'px')
square.setAttribute('height', rectWidth + 'px')
svg {
width: 100vmin;
height: 100vmin;
}
<svg viewbox="0 0 100 100">
<circle id="circle" fill="green" r="40" cx="50" cy="50"></circle>
<rect id="square" fill="red" transform="translate(50, 50) rotate(45)"></rect></svg>
推荐阅读
- git - GitLabee 身份验证失败
- html - 在我自己的网站上格式化 Freshdesk 解决方案
- c# - 在我抓住并移动它之前,窗户没有完全绘画
- servicestack - 允许不安全域上的 cookie
- javascript - 在 JavaScript 中创建 GIF 和 PNG
- python - 如何在不使用熊猫的情况下从 s3 存储桶获取 excel 文件并将文件再次上传到 s3 存储桶 - Python
- flutter - Flame 0.29.4 无法以可靠的零安全运行
- php - PHP - 如何确定文件在 public_html 文件夹中?
- python - 如何根据if语句设置Python(全局?)变量值
- sql - 如何申请加入sequelize