P5.js 用矩形画圆形
P5.js draw circle shape with rectangles
我试图从 P5.js
中的几个矩形的轮廓形成一个圆形
这是我目前所拥有的,但如您所见,它并不是一个圆圈。
https://codepen.io/anon/pen/KZaOKB
const width = 400;
function setup() {
createCanvas(width, width);
}
function draw() {
background(220);
noStroke();
fill(color(175,100,220));
for (var i = 0; i <= 36; i++) {
var e = radians(i * 10);
var height = 150 * sin(e/2) * 2;
rect(i*11 ,(width/2)-10-(height/2), 10, height);
}
}
这是我用来求圆和弦的公式。
我不确定是我的数学有问题还是我使用了完全错误的公式。谢谢
我给你写了一个函数来做这个:
这是p5.js:
function drawCircle(x, y, radius) {
for (var i = 0; i <= 360; i++) {
rect(x, y, cos(i) * radius, sin(i) * radius);
}
}
这是处理中:
void drawCircle(float x, float y, float radius) {
for (int i = 0; i <= 360; i++) {
rect(x, y, cos(i) * radius, sin(i) * radius);
}
}
'i' 是角度(我们这样做了 360 次。如果你想要更精细的细节或者你正在绘制非常大的 corcles,你可能想要更小的步骤。例如:i += 0.1
然而这将增加计算所需的时间)
'x'和'y'是位置,radius是圆半径。
你这样调用函数:
P5.js:
function setup() {
createCanvas(100, 100);
background(0);
drawCircle(width / 2, height / 2, 50);
}
处理中:
void setup () {
size(100, 100);
background(0);
drawCircle(width / 2, height / 2, 60);
}
这是圆圈的样子(谁猜的 - 我看起来像圆圈):
如果我们将矩形可视化:
我完全专业的公式:
希望对您有所帮助。祝你今天过得愉快! :D
这称为弧矢(弧或线段的高度)
我有 Radius 和 Sagitta,需要使用以下公式计算弧宽(也就是弦的长度):
s: 是矢状面的长度
r: 是圆弧的半径
l:是弧底距离的一半(弦长的一半)
注意以上所有公式中,长度l都是圆弧宽度的一半。全宽将是这个的两倍。只需将 l 乘以 2
JavaScript 代码使用 P5.js
const r = 200;
const lineWidth = 10;
const lines = (r * 2) / lineWidth;
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
noStroke();
fill(color(175,100,220));
for (var i = 0; i <= lines; i++) {
const s = (i * lineWidth) + lineWidth;
const chordLength = (Math.sqrt((2 * s * r) - (s*s)) * 2);
rect(i * lineWidth, r - (chordLength / 2), lineWidth-1, chordLength);
// rect(x, y, width, height)
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.11/p5.min.js"></script>
我试图从 P5.js
中的几个矩形的轮廓形成一个圆形这是我目前所拥有的,但如您所见,它并不是一个圆圈。
https://codepen.io/anon/pen/KZaOKB
const width = 400;
function setup() {
createCanvas(width, width);
}
function draw() {
background(220);
noStroke();
fill(color(175,100,220));
for (var i = 0; i <= 36; i++) {
var e = radians(i * 10);
var height = 150 * sin(e/2) * 2;
rect(i*11 ,(width/2)-10-(height/2), 10, height);
}
}
这是我用来求圆和弦的公式。
我不确定是我的数学有问题还是我使用了完全错误的公式。谢谢
我给你写了一个函数来做这个:
这是p5.js:
function drawCircle(x, y, radius) {
for (var i = 0; i <= 360; i++) {
rect(x, y, cos(i) * radius, sin(i) * radius);
}
}
这是处理中:
void drawCircle(float x, float y, float radius) {
for (int i = 0; i <= 360; i++) {
rect(x, y, cos(i) * radius, sin(i) * radius);
}
}
'i' 是角度(我们这样做了 360 次。如果你想要更精细的细节或者你正在绘制非常大的 corcles,你可能想要更小的步骤。例如:i += 0.1
然而这将增加计算所需的时间)
'x'和'y'是位置,radius是圆半径。
你这样调用函数:
P5.js:
function setup() {
createCanvas(100, 100);
background(0);
drawCircle(width / 2, height / 2, 50);
}
处理中:
void setup () {
size(100, 100);
background(0);
drawCircle(width / 2, height / 2, 60);
}
这是圆圈的样子(谁猜的 - 我看起来像圆圈):
如果我们将矩形可视化:
我完全专业的公式:
希望对您有所帮助。祝你今天过得愉快! :D
这称为弧矢(弧或线段的高度)
我有 Radius 和 Sagitta,需要使用以下公式计算弧宽(也就是弦的长度):
s: 是矢状面的长度
r: 是圆弧的半径
l:是弧底距离的一半(弦长的一半)
注意以上所有公式中,长度l都是圆弧宽度的一半。全宽将是这个的两倍。只需将 l 乘以 2
JavaScript 代码使用 P5.js
const r = 200;
const lineWidth = 10;
const lines = (r * 2) / lineWidth;
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
noStroke();
fill(color(175,100,220));
for (var i = 0; i <= lines; i++) {
const s = (i * lineWidth) + lineWidth;
const chordLength = (Math.sqrt((2 * s * r) - (s*s)) * 2);
rect(i * lineWidth, r - (chordLength / 2), lineWidth-1, chordLength);
// rect(x, y, width, height)
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.11/p5.min.js"></script>