[Processing] 클릭 포인트를 저장하고 아트 작품 그리기
16420 단어 그림목록processing컴퓨터 그래픽예술
vertex를 사용하여 동적 아트를 그립니다.
설명
라고해도 가볍게 동작 설명을
마우스를 클릭하면 점이 기울어집니다.
첫 번째 점은 마우스의 위치를 목표로 계속 움직입니다.
선두 이외의 점은 1개전의 (선배에 해당하는 점)의 위치를 목표로 합니다
⇒항상 움직이는 아트의 완성
선두 이외의 점이 약간 지름길을 해 목표로 하기 때문에, 시간이 지나면 수렴해 가는 것이 보고 있어 즐겁습니다
(^▽^)/
첫 번째 점이 마우스 위치에 도달하면 첫 번째 점이 사라지고 ...
프로그램
확장자 진짜는 .pde입니다만, java로 하는 쪽이 색이 붙어 보기 쉬워져서
Vertexer.java
//リストから削除するかどうかboolean
boolean listReMove = false;
// beginShape() に入れる変数
int Mode_Number = 0;
//下の表をもとに図形の値を代入
int[] num = {11, 9, 16, 10, 18, 20};
//任意にリセットできるように変数として保持
int colorNum = 0;
String[] texter =
{
"TRIANGLE_FAN", "TRIANGLES", "QUADS",
"TRIANGLE_STRIP", "QUAD_STRIP", "DEFAULT"
};
//連続してモード変更しないようにタイマー機能
int timer = 0;
/*
//シェイプモード int の値
TRIANGLE_FAN // 11
TRIANGLES // 8,9
QUADS // 16,17
TRIANGLE_STRIP // 10
QUAD_STRIP // 18
LINES // 5
DEFAULT // 20
DEFAULT_NOFILL // 50
NOFILL_CLOSE // 51
*/
class Vertex {
float x, y;
color c;
//一つ前のVertex
Vertex prev;
//prevの位置X,Y
float prevX;
float prevY;
//一度だけロック
boolean onceLock = true;
Vertex(float x, float y, int r, Vertex pre) {
this.x = x;
this.y = y;
c = color(r*2, 200 - r*2, 255 - r*4, 50);
prev = pre;
}
void Move() {
if (onceLock) {
onceLock = false;
if (prev != null) {
//一つ前のVertexに向かう
prevX = prev.x;
prevY = prev.y;
} else
{
//prevがない(リストの先頭)はマウスに向かう
prevX = mouseX;
prevY = mouseY;
}
}
//位置関係から移動
x += sign(prevX - x);
y += sign(prevY - y);
//prevがかつていた位置に来たら、
//再度prevの位置を確かめる
if ((prevX - x) == 0 && (prevY - y) == 0) {
//ロック解除
onceLock = true;
//先頭(prevがない)時、マウスと距離が離れてない時
if (prev == null) {
if (mouseX - x == 0 && mouseY - y == 0) {
//リストの先頭削除 boolean 解除
listReMove = true;
}
}
}
}
}
ArrayList<Vertex> vlist = new ArrayList<Vertex>();
void setup() {
//size(1800, 800, P2D);
fullScreen();
frameRate(30);
noStroke();
textFont(createFont("MS Gothic", 48, true));
textSize(50);
textAlign(CENTER);
}
void draw() {
background(255);
beginShape( num[Mode_Number % num.length] );
for (Vertex v : vlist) {
v.Move();
fill(v.c);
vertex(v.x, v.y);
}
endShape();
//モード表示
text(texter[Mode_Number % texter.length], width/2, 50);
timer++;
//リストの先頭削除するかどうか if 文
if (listReMove) {
listReMove = false;
//リストの長さを保つため if 文
if (vlist.size() > 2 && timer > 60) {
timer = 0;
vlist.remove(0);
//リストの先頭になる Vertex を先頭仕様に設定
Vertex ver = vlist.get(1);
ver.onceLock = true;
ver.prev = null;
// beginShape() モード変更
Mode_Number++;
}
}
}
void mousePressed() {
Vertex v ;
//リストのサイズごとに場合分け
if (vlist.size() == 0) {
v = new Vertex(mouseX, mouseY, 0, null);
} else {
v = new Vertex(mouseX, mouseY, colorNum++, vlist.get(vlist.size()-1));
}
vlist.add(v);
}
void keyPressed() {
//カラー数値リセット
colorNum = 0;
}
//正なら1、負なら-1、0なら0を返す
float sign(float a) {
if (a > 0) return 1;
else if (a == 0) return 0;
else return -1;
}
속편?
[프로세싱] 수수께끼 그리는 다이나믹 아트
Reference
이 문제에 관하여([Processing] 클릭 포인트를 저장하고 아트 작품 그리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/NekoCan/items/f628be98779451751f19
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
라고해도 가볍게 동작 설명을
마우스를 클릭하면 점이 기울어집니다.
첫 번째 점은 마우스의 위치를 목표로 계속 움직입니다.
선두 이외의 점은 1개전의 (선배에 해당하는 점)의 위치를 목표로 합니다
⇒항상 움직이는 아트의 완성
선두 이외의 점이 약간 지름길을 해 목표로 하기 때문에, 시간이 지나면 수렴해 가는 것이 보고 있어 즐겁습니다
(^▽^)/
첫 번째 점이 마우스 위치에 도달하면 첫 번째 점이 사라지고 ...
프로그램
확장자 진짜는 .pde입니다만, java로 하는 쪽이 색이 붙어 보기 쉬워져서
Vertexer.java
//リストから削除するかどうかboolean
boolean listReMove = false;
// beginShape() に入れる変数
int Mode_Number = 0;
//下の表をもとに図形の値を代入
int[] num = {11, 9, 16, 10, 18, 20};
//任意にリセットできるように変数として保持
int colorNum = 0;
String[] texter =
{
"TRIANGLE_FAN", "TRIANGLES", "QUADS",
"TRIANGLE_STRIP", "QUAD_STRIP", "DEFAULT"
};
//連続してモード変更しないようにタイマー機能
int timer = 0;
/*
//シェイプモード int の値
TRIANGLE_FAN // 11
TRIANGLES // 8,9
QUADS // 16,17
TRIANGLE_STRIP // 10
QUAD_STRIP // 18
LINES // 5
DEFAULT // 20
DEFAULT_NOFILL // 50
NOFILL_CLOSE // 51
*/
class Vertex {
float x, y;
color c;
//一つ前のVertex
Vertex prev;
//prevの位置X,Y
float prevX;
float prevY;
//一度だけロック
boolean onceLock = true;
Vertex(float x, float y, int r, Vertex pre) {
this.x = x;
this.y = y;
c = color(r*2, 200 - r*2, 255 - r*4, 50);
prev = pre;
}
void Move() {
if (onceLock) {
onceLock = false;
if (prev != null) {
//一つ前のVertexに向かう
prevX = prev.x;
prevY = prev.y;
} else
{
//prevがない(リストの先頭)はマウスに向かう
prevX = mouseX;
prevY = mouseY;
}
}
//位置関係から移動
x += sign(prevX - x);
y += sign(prevY - y);
//prevがかつていた位置に来たら、
//再度prevの位置を確かめる
if ((prevX - x) == 0 && (prevY - y) == 0) {
//ロック解除
onceLock = true;
//先頭(prevがない)時、マウスと距離が離れてない時
if (prev == null) {
if (mouseX - x == 0 && mouseY - y == 0) {
//リストの先頭削除 boolean 解除
listReMove = true;
}
}
}
}
}
ArrayList<Vertex> vlist = new ArrayList<Vertex>();
void setup() {
//size(1800, 800, P2D);
fullScreen();
frameRate(30);
noStroke();
textFont(createFont("MS Gothic", 48, true));
textSize(50);
textAlign(CENTER);
}
void draw() {
background(255);
beginShape( num[Mode_Number % num.length] );
for (Vertex v : vlist) {
v.Move();
fill(v.c);
vertex(v.x, v.y);
}
endShape();
//モード表示
text(texter[Mode_Number % texter.length], width/2, 50);
timer++;
//リストの先頭削除するかどうか if 文
if (listReMove) {
listReMove = false;
//リストの長さを保つため if 文
if (vlist.size() > 2 && timer > 60) {
timer = 0;
vlist.remove(0);
//リストの先頭になる Vertex を先頭仕様に設定
Vertex ver = vlist.get(1);
ver.onceLock = true;
ver.prev = null;
// beginShape() モード変更
Mode_Number++;
}
}
}
void mousePressed() {
Vertex v ;
//リストのサイズごとに場合分け
if (vlist.size() == 0) {
v = new Vertex(mouseX, mouseY, 0, null);
} else {
v = new Vertex(mouseX, mouseY, colorNum++, vlist.get(vlist.size()-1));
}
vlist.add(v);
}
void keyPressed() {
//カラー数値リセット
colorNum = 0;
}
//正なら1、負なら-1、0なら0を返す
float sign(float a) {
if (a > 0) return 1;
else if (a == 0) return 0;
else return -1;
}
속편?
[프로세싱] 수수께끼 그리는 다이나믹 아트
Reference
이 문제에 관하여([Processing] 클릭 포인트를 저장하고 아트 작품 그리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/NekoCan/items/f628be98779451751f19
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
//リストから削除するかどうかboolean
boolean listReMove = false;
// beginShape() に入れる変数
int Mode_Number = 0;
//下の表をもとに図形の値を代入
int[] num = {11, 9, 16, 10, 18, 20};
//任意にリセットできるように変数として保持
int colorNum = 0;
String[] texter =
{
"TRIANGLE_FAN", "TRIANGLES", "QUADS",
"TRIANGLE_STRIP", "QUAD_STRIP", "DEFAULT"
};
//連続してモード変更しないようにタイマー機能
int timer = 0;
/*
//シェイプモード int の値
TRIANGLE_FAN // 11
TRIANGLES // 8,9
QUADS // 16,17
TRIANGLE_STRIP // 10
QUAD_STRIP // 18
LINES // 5
DEFAULT // 20
DEFAULT_NOFILL // 50
NOFILL_CLOSE // 51
*/
class Vertex {
float x, y;
color c;
//一つ前のVertex
Vertex prev;
//prevの位置X,Y
float prevX;
float prevY;
//一度だけロック
boolean onceLock = true;
Vertex(float x, float y, int r, Vertex pre) {
this.x = x;
this.y = y;
c = color(r*2, 200 - r*2, 255 - r*4, 50);
prev = pre;
}
void Move() {
if (onceLock) {
onceLock = false;
if (prev != null) {
//一つ前のVertexに向かう
prevX = prev.x;
prevY = prev.y;
} else
{
//prevがない(リストの先頭)はマウスに向かう
prevX = mouseX;
prevY = mouseY;
}
}
//位置関係から移動
x += sign(prevX - x);
y += sign(prevY - y);
//prevがかつていた位置に来たら、
//再度prevの位置を確かめる
if ((prevX - x) == 0 && (prevY - y) == 0) {
//ロック解除
onceLock = true;
//先頭(prevがない)時、マウスと距離が離れてない時
if (prev == null) {
if (mouseX - x == 0 && mouseY - y == 0) {
//リストの先頭削除 boolean 解除
listReMove = true;
}
}
}
}
}
ArrayList<Vertex> vlist = new ArrayList<Vertex>();
void setup() {
//size(1800, 800, P2D);
fullScreen();
frameRate(30);
noStroke();
textFont(createFont("MS Gothic", 48, true));
textSize(50);
textAlign(CENTER);
}
void draw() {
background(255);
beginShape( num[Mode_Number % num.length] );
for (Vertex v : vlist) {
v.Move();
fill(v.c);
vertex(v.x, v.y);
}
endShape();
//モード表示
text(texter[Mode_Number % texter.length], width/2, 50);
timer++;
//リストの先頭削除するかどうか if 文
if (listReMove) {
listReMove = false;
//リストの長さを保つため if 文
if (vlist.size() > 2 && timer > 60) {
timer = 0;
vlist.remove(0);
//リストの先頭になる Vertex を先頭仕様に設定
Vertex ver = vlist.get(1);
ver.onceLock = true;
ver.prev = null;
// beginShape() モード変更
Mode_Number++;
}
}
}
void mousePressed() {
Vertex v ;
//リストのサイズごとに場合分け
if (vlist.size() == 0) {
v = new Vertex(mouseX, mouseY, 0, null);
} else {
v = new Vertex(mouseX, mouseY, colorNum++, vlist.get(vlist.size()-1));
}
vlist.add(v);
}
void keyPressed() {
//カラー数値リセット
colorNum = 0;
}
//正なら1、負なら-1、0なら0を返す
float sign(float a) {
if (a > 0) return 1;
else if (a == 0) return 0;
else return -1;
}
[프로세싱] 수수께끼 그리는 다이나믹 아트
Reference
이 문제에 관하여([Processing] 클릭 포인트를 저장하고 아트 작품 그리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/NekoCan/items/f628be98779451751f19텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)