p5.js란 무엇일까요?
p5.js는 JavaScript 기반의 프로그래밍 라이브러리로서, 그래픽, 애니메이션, 인터랙션 등 다양한 시각적인 작업을 쉽게 할 수 있도록 도와줍니다.
p5.js는 Processing 프로그래밍 언어의 JavaScript 포팅 버전으로, 자바스크립트와 HTML5 캔버스를 사용하여 다양한 시각적 요소를 만들 수 있습니다. p5.js는 프로그래밍 경험이 적은 사람들도 쉽게 이해하고 사용할 수 있도록 설계되어 있으며, 많은 라이브러리, 도구, 그리고 튜토리얼이 제공됩니다.
p5.js는 다양한 그래픽 요소를 생성할 수 있습니다. 예를 들어, 2D 도형, 그리드, 그래프, 텍스트, 이미지, 비디오 등을 만들 수 있습니다. 이러한 그래픽 요소들은 애니메이션화되어 움직이거나, 인터랙션에 반응하거나, 사용자 입력을 받아 처리할 수 있습니다.
p5.js는 또한 웹 기반의 시각화를 할 때 유용합니다. 데이터 시각화나 과학 시뮬레이션 등에도 사용할 수 있으며, 온라인 교육 자료나 웹 게임 등 다양한 분야에서도 활용됩니다.
코드를 입력하면, 플래쉬 비슷한 것이 구현되어 상호작용을 할 수 있게 됩니다
공식홈페이지는 아래와 같습니다.
home | p5.js
안녕하세요! p5.js는 크리에이티브 코딩을 위한 자바스크립트 라이브러리로, 예술가, 디자이너, 교육자, 입문자, 그리고 모두에게 접근성 높고 포용적인 언어를 지향합니다! p5.js는 무료 오픈 소
p5js.org
아래와 같은 동작을 가능하게 만드는 스크립트를 만들어 보겠습니다. play버튼을 눌러보십시오.
chatgpt에게 다음과 같은 요청을 해보았습니다.
다음은 p5.js로 구현할 수 있는 코드입니다. 이 코드는 캔버스에서 작은 원들을 무작위로 움직이게 하고, 공이 서로 부딪히거나 벽에 부딪히면 반사되게 합니다. 또한, 공들이 서로 부딪히면 그 색상을 변경하고, 현재 각 색상의 공의 개수를 오른쪽 상단에 표시합니다.
javascriptlet balls = [];
function setup() {
createCanvas(800, 600);
// 각 색상의 원 20개 생성
for (let i = 0; i < 20; i++) {
balls.push(new Ball(random(width), random(height), 'red'));
balls.push(new Ball(random(width), random(height), 'blue'));
balls.push(new Ball(random(width), random(height), 'yellow'));
}
}
function draw() {
background(200);
let redCount = 0;
let blueCount = 0;
let yellowCount = 0;
// 각 원의 움직임과 충돌 처리
for (let i = 0; i < balls.length; i++) {
balls[i].move();
balls[i].display();
if (balls[i].color === 'red') redCount++;
if (balls[i].color === 'blue') blueCount++;
if (balls[i].color === 'yellow') yellowCount++;
for (let j = i + 1; j < balls.length; j++) {
if (balls[i].intersects(balls[j])) {
if (balls[i].color === 'red' && balls[j].color === 'blue') balls[j].color = 'red';
if (balls[i].color === 'blue' && balls[j].color === 'yellow') balls[j].color = 'blue';
if (balls[i].color === 'yellow' && balls[j].color === 'red') balls[j].color = 'yellow';
}
}
}
// 오른쪽 상단에 각 색상의 공의 개수 표시
textSize(20);
text("Red: " + redCount, 650, 30);
text("Blue: " + blueCount, 650, 60);
text("Yellow: " + yellowCount, 650, 90);
}
class Ball {
constructor(x, y, color) {
this.x = x;
this.y = y;
this.xspeed = random(-2, 2);
this.yspeed = random(-2, 2);
this.color = color;
}
move() {
this.x += this.xspeed;
this.y += this.yspeed;
if (this.x > width || this.x < 0) {
this.xspeed *= -1;
}
if (this.y > height || this.y < 0) {
this.yspeed *= -1;
}
}
display() {
fill(this.color);
noStroke();
ellipse(this.x, this.y, 20, 20);
}
intersects(other) {
let d = dist(this.x, this.y, other.x, other.y);
return (d < 20);
}
}
이 코드는 모든 공을 반경 10인 원으로
공이 서로 통과하지 않고 반사되게 하려면, intersects
메소드가 호출될 때 공의 속도를 반대로 바꾸는 코드를 추가해야합니다. 또한, 색상 변환 로직도 조금 수정해야 합니다. 다음은 수정된 코드 부분입니다:
javascript// draw 함수 내에서 충돌 처리 부분
for (let i = 0; i < balls.length; i++) {
// 나머지 코드...
for (let j = i + 1; j < balls.length; j++) {
if (balls[i].intersects(balls[j])) {
let tempX = balls[i].xspeed;
let tempY = balls[i].yspeed;
balls[i].xspeed = balls[j].xspeed;
balls[i].yspeed = balls[j].yspeed;
balls[j].xspeed = tempX;
balls[j].yspeed = tempY;
if (balls[i].color === 'red' && balls[j].color === 'blue') balls[j].color = 'red';
else if (balls[i].color === 'blue' && balls[j].color === 'yellow') balls[j].color = 'blue';
else if (balls[i].color === 'yellow' && balls[j].color === 'red') balls[j].color = 'yellow';
if (balls[j].color === 'red' && balls[i].color === 'blue') balls[i].color = 'red';
else if (balls[j].color === 'blue' && balls[i].color === 'yellow') balls[i].color = 'blue';
else if (balls[j].color === 'yellow' && balls[i].color === 'red') balls[i].color = 'yellow';
}
}
}
위의 코드는 공이 서로 부딪히면 공의 속도를 서로 바꾸는 로직을 추가하였습니다. 이는 공이 서로 반사되어 튕겨나가는 효과를 만듭니다. 또한, 색상 변환 로직도 양쪽 공에 대해 동일하게 적용되도록 수정하였습니다.
코드가 이해되지 않는다면, 다음은 수정된 전체 코드입니다. 공이 서로 부딪히면 반사되어 튕겨나가고, 색상도 변환되는 것을 확인할 수 있습니다.
javascriptlet balls = [];
function setup() {
createCanvas(800, 600);
// 각 색상의 원 20개 생성
for (let i = 0; i < 20; i++) {
balls.push(new Ball(random(width), random(height), 'red'));
balls.push(new Ball(random(width), random(height), 'blue'));
balls.push(new Ball(random(width), random(height), 'yellow'));
}
}
function draw() {
background(200);
let redCount = 0;
let blueCount = 0;
let yellowCount = 0;
// 각 원의 움직임과 충돌 처리
for (let i = 0; i < balls.length; i++) {
balls[i].move();
balls[i].display();
if (balls[i].color === 'red') redCount++;
if (balls[i].color === 'blue') blueCount++;
if (balls[i].color === 'yellow') yellowCount++;
for (let j = i + 1; j < balls.length; j++) {
if (balls[i].intersects(balls[j])) {
let tempX = balls[i].xspeed;
let tempY = balls[i].yspeed;
balls[i].xspeed = balls[j].xspeed;
balls[i].yspeed = balls[j].yspeed;
balls[j].xspeed = tempX;
balls[j].yspeed = tempY;
if (balls[i].color === 'red' && balls[j].color === 'blue') balls[j].color = 'red';
else if (balls[i].color === 'blue' && balls[j].color === 'yellow') balls[j].color = 'blue';
else if (balls[i].color === 'yellow' && balls[j].color === 'red') balls[j].color = 'yellow';
if (balls[j].color === 'red' && balls[i].color === 'blue') balls[i].color = 'red';
else if (balls[j].color === 'blue' && balls[i].color === 'yellow') balls[i].color = 'blue';
else if (balls[j].color === 'yellow' && balls[i].color === 'red') balls[i].color = 'yellow';
}
}
}
// 오른쪽 상단에 각 색상의 공의 개수 표시
textSize(20);
text("Red: " + redCount, 650, 30);
text("Blue: " + blueCount, 650, 60);
text("Yellow: " + yellowCount, 650, 90);
}
class Ball {
constructor(x, y, color) {
this.x = x;
this.y = y;
this.xspeed = random(-2, 2);
this.yspeed = random(-2, 2);
this.color = color;
}
move() {
this.x += this.xspeed;
this.y += this.yspeed;
if (this.x > width || this.x < 0) {
this.xspeed *= -1;
}
if (this.y > height || this.y < 0) {
this.yspeed
죄송합니다. 메시지가 잘렸네요. 여기에 Ball
클래스의 나머지 부분이 있습니다:
javascript if (this.y > height || this.y < 0) {
this.yspeed *= -1;
}
}
display() {
fill(this.color);
noStroke();
ellipse(this.x, this.y, 20, 20);
}
intersects(other) {
let d = dist(this.x, this.y, other.x, other.y);
return (d < 20);
}
}
위 코드는 공이 캔버스 경계에 닿을 때마다 반대 방향으로 움직이게 하며, 공이 다른 공과 충돌했는지 판단하고, 공을 캔버스에 그리는 로직을 포함합니다. 이 코드를 전체 코드와 합치면, 원하는 기능을 구현한 완전한 p5.js 스케치를 얻을 수 있습니다.
위의 p5.js 코드를 HTML에 삽입하려면, HTML 파일을 생성하고 다음과 같은 형식으로 코드를 작성하면 됩니다:
html<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Color Changing Balls</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
</head>
<body>
<script>
// 여기에 위에서 제공한 p5.js 코드를 붙여넣기
</script>
</body>
</html>
위 HTML 구조는 매우 기본적인 형태이며, script
태그를 사용해 p5.js 라이브러리를 불러온 후, 같은 방법으로 body
태그 내에 직접 p5.js 코드를 삽입합니다. 해당 스크립트에 본문에서 제공한 p5.js 코드를 그대로 붙여넣으면 됩니다.
이 HTML 파일을 웹 브라우저에서 열면, 작성한 p5.js 코드가 실행되어 원하는 그래픽을 볼 수 있습니다.
저 스크립트를 복사하여, 위 홈페이지에서 에디터에 들어간뒤에 스크립트를 붙여넣으면 똑같은 것을 만들 수 있습니다.
p5.js는 소리, 3D, 마우스 포인터 등 다양한 매개체와 상호작용 할 수 있는 강력한 라이브러리입니다.
'AI' 카테고리의 다른 글
[chatGPT 파워포인트] 사진첩 만들기 (0) | 2023.05.05 |
---|---|
[chatGPT p5] up-down게임 (0) | 2023.05.05 |
[chatGPT 구글시트] apps script 사용하기 (0) | 2023.04.26 |
[chatGPT 파이썬] 바코드 만들기 (0) | 2023.04.26 |
[chatGPT 파이썬] html파일 수정 (0) | 2023.04.25 |