๐ฒใใฅใใฉใณใฎ้ใp5.jsใงๅ็พใงใใพใใใ๏ผ
ใใฅใใฉใณใฎ้ๅ้กใฏ็ขบ็่ซใฎๆๅใชๅ้กใงใ้ทใใฎ้ใๅบใซๆใใใๅนณ่ก็ทใฎ้ใซ็กไฝ็บใซๆใใใจใใซใ้ใ็ทใๆจชๅใ็ขบ็ใ่จ็ฎใใใใจใซใใใๅๅจ็(ฯ)ใฎ่ฟไผผๅคใๆฑใใใใจใใงใใพใใ
ใใฎๅ้กใp5.jsใงๅ็พใใใซใฏใไปฅไธใฎในใใใใๅฎ่ฃ ใใๅฟ ่ฆใใใใพใ๏ผ
ๅนณ่ก็ทใๆ็ปใใ: ๅบใซๆใใใๅนณ่ก็ทใๆ็ปใใพใใใใใใฎ็ทใฏ็ญ้้ใงใใใ้้ใฏ้ใฎ้ทใใจๅใใใใใไปฅไธใงใใๅฟ ่ฆใใใใพใใ
้ใใฉใณใใ ใซๆใใ: ้ใใฉใณใใ ใซ็ๆใใใใฎไฝ็ฝฎ๏ผไธญๅฟใฎx,yๅบงๆจ๏ผใจ่งๅบฆใใฉใณใใ ใซ่จญๅฎใใพใใ
้ใ็ทใๆจชๅใใๅคๅฎใใ: ้ใใฉใฎๅนณ่ก็ทใๆจชๅใฃใฆใใใใฉใใใๅคๅฎใใพใใ
ฯใฎ่ฟไผผๅคใ่จ็ฎใใ: ้ใ็ทใๆจชๅใ็ขบ็ใ็จใใฆใฯใฎ่ฟไผผๅคใ่จ็ฎใใพใใใใฅใใฉใณใฎ้ๅ้กใฎ็่ซใซใใใจใใใฎ็ขบ็ใฏ2L/(ฯT)ใงไธใใใใพใ๏ผLใฏ้ใฎ้ทใใTใฏ็ทใฎ้้๏ผใ
ใใใๅฎ่ฃ ใใใใใฎๅบๆฌ็ใชp5.jsใฎใณใผใในใฑใใใๆธใใฆใฟใพใใใใ
ไปฅไธใฎใณใผใใฏp5.jsใไฝฟ็จใใฆใใฅใใฉใณใฎ้ๅ้กใใทใใฅใฌใผใทใงใณใใใใใฎใใฎใงใใใใฎใทใใฅใฌใผใทใงใณใงใฏใ็ป้ขไธใซ็ญ้้ใฎๅนณ่ก็ทใๆใใใฉใณใใ ใซ้ใๆใใฆใใใใ็ทใๆจชๅใใใฉใใใๅคๅฎใใพใใใทใใฅใฌใผใทใงใณใ้ใใฆใฯใฎ่ฟไผผๅคใ่จ็ฎใใพใใ
// Buffon's Needle simulation parameters
let needleLength = 100;
let lineSpacing = 100;
let count = 0; // Count of needles crossing a line
let total = 0; // Total needles thrown
function setup() {
createCanvas(400, 400);
background(255);
drawLines();
}
function drawLines() {
for (let i = 0; i < width; i += lineSpacing) {
stroke(0);
line(i, 0, i, height);
}
}
function throwNeedle() {
// Needle center
let x = random(width);
let y = random(height);
// Needle angle
let angle = random(TWO_PI);
// Needle endpoints
let x1 = x + (needleLength / 2) * cos(angle);
let y1 = y + (needleLength / 2) * sin(angle);
let x2 = x - (needleLength / 2) * cos(angle);
let y2 = y - (needleLength / 2) * sin(angle);
// Check if needle crosses a line
let crossesLine = false;
for (let i = 0; i < width; i += lineSpacing) {
if ((x1 < i && x2 > i) || (x1 > i && x2 < i)) {
crossesLine = true;
break;
}
}
// Draw needle
if (crossesLine) {
stroke(255, 0, 0); // Red if crossing a line
count++;
} else {
stroke(0, 0, 255); // Blue if not
}
line(x1, y1, x2, y2);
// Update total needles thrown
total++;
}
function draw() {
if (total < 1000) { // Change this number for more or fewer needles
throwNeedle();
} else {
noLoop(); // Stop drawing once we reach the total
let probability = count / total;
let piEstimate = (2 * needleLength) / (probability * lineSpacing);
console.log('Pi Estimate:', piEstimate);
}
}
function mouseClicked() {
total = 0; // Reset total needles thrown
count = 0; // Reset count of needles crossing a line
clear();
background(255);
drawLines();
loop();
}
ใใฅใใฉใณใฎ้ใจใฏใ็ขบ็่ซใใใณ็ตฑ่จๅญฆใซใใใๆๅใชๅ้กใงใใใฉใณในใฎ่ช็ถ็งๅญฆ่
ใธใงใซใธใฅ๏ผใซใคใปใซใฏใฌใผใซใปใใปใใฅใใฉใณใซใกใชใใงๅไปใใใใพใใใใใฎๅ้กใฏใๆฐๅญฆ็ใช็ขบ็ใ็จใใฆๅๅจ็ใฎ่ฟไผผๅคใๆฑใใๆนๆณใฎไธใคใงใใ
ใฉใใใฎในใฟใคใซใง่ชฌๆใใใชใใใใใชๆใใซใชใใพใ๏ผ
Yoใ่ใใฆใใใใใฎใใฅใใฉใณใฎ้ใฎ่ฉฑใ ๆฐๅญฆใฎใใชใใฏใใกใใฃใจใใ้ญๆณใฟใใใชใใใ ใใใใ
ๅนณ้ขไธใซ็ด็ทใๅผใใฆใ้้ไธๅฎใงใ ้ใ่ฝใจใใฒใผใ ใๅงใใใใใใชใใใ
้ใฎ้ทใใ็ด็ทใฎ้้ใใใใใญใผใ ็ขบ็ใไฝฟใฃใฆใๅๅจ็ใ่ฆใคใๅบใใใ ใ
้ใ็ทใ่ถใใ็ขบ็ใใใใ่จ็ฎใใฆใ 2ๅใใฆ้ใฎ้ทใใๅฒใใ็ด็ทใฎ้้ใงๆใใใใ ใ
ไฝๅบฆใ่ฉฆใใฐ่ฉฆใใปใฉใ็ๅฎใซ่ฟใฅใใ ๅๅจ็ฯใ3.14... ใใใ่ฆใใฆใใใ
ใใฅใใฉใณใฎ้ใใใ ใฎ้ใณใใใชใใ ๆฐๅญฆใฎ็พใใใ่ช็ถใฎๆณๅใ่ฆใใฆใใใใใ ใ
ๆฐๅญฆ่
ใฎๅคขใ็งๅญฆ่
ใฎใญใใณใ ็ขบ็ใจ็ตฑ่จใงใๅฎๅฎใฎ็็ใซไธๆญฉ่ฟใฅใใ
ใ้กใ่ดใใพใ