質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

2回答

993閲覧

もぞもぞと動く線を実装したい

justmeet0924

総合スコア44

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

1クリップ

投稿2021/12/18 00:02

編集2021/12/19 14:27

僕のイメージでしかないのですが、線の中を虫が這い回るような少し気持ち悪い動きを実装したい。
難しいかもしれませんが、もぞもぞっと動くような動きです。
実装の手がかりを知っている方おられませんか?
パーリンノイズがその助けになるかもしれないのですが、使い方に疎いです。
効果的な使い方がよくわからないです。

※追記

一直線に動くイメージではなく、スピードにムラがあり、進むイメージです。
僕が作ったものは全て一直線的な動きをしています。
作ってみたサンプル

※追記
挙げてくださったサンプル、作ってくださったコードにすごく参考になるアイディアが多く、感激しています。さらに贅沢を言うなら、細い線の中を、まるでチューブの中を強引に進むような動きがやりたかったのかもしれません。チューブの中を虫が進む時、それが押し広げられてドクドクと波打つ動き・・・、考えただけで気持ち悪いですね。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2021/12/18 01:47

言葉で説明するのは難しいとは思いますが、「僕のイメージ」を第三者が想像するのは非常に難しいです。 何か元になるコードがあって「ここをこうならないか?」のような質問でないと、回答できそうもないです。 サンプルや公開されているものから、近いイメージのものを探せませんか? 公式サンプルから使えそうなもの [Brownian Motion | examples | p5.js](https://p5js.org/examples/simulate-brownian-motion.html [Animation | examples | p5.js](https://p5js.org/examples/hello-p5-animation.html [Noise Wave | examples | p5.js](https://p5js.org/examples/math-noise-wave.html OpenProcessingで検索 [Browse Sketches - OpenProcessing](https://openprocessing.org/browse/?time=anytime&type=all&q=worm#
justmeet0924

2021/12/18 02:08

了解しました! 探してみます!
justmeet0924

2021/12/18 03:53

提供してくださった参考サイト見てみました。 ブラウン運動よりは生命感があるNoise Waveの方が参考になりそうでした。
thkana

2021/12/18 05:02

変化させたいのは「速度」なのですか?
TN8001

2021/12/19 11:29

参考になりそうなものの追加 要望とは違うと思いますが、かなり気持ち悪いです(褒めています) [bounceOut - OpenProcessing](https://openprocessing.org/sketch/741384 Processingからは離れてしまいますが、Paper.jsのサンプルにも使えそうなものがありました。 かわいい感じの名前ですが、なんかゾワゾワします^^; [Paper.js — Nyan Rainbow](http://paperjs.org/examples/nyan-rainbow/ 普通に使えそうです。 [Paper.js — Meta Balls](http://paperjs.org/examples/meta-balls/ --- なんか作ってみようとは思っていたんですが、わたしはセンスがないのでダメそうですw
justmeet0924

2021/12/19 14:12

http://paperjs.org/examples/chain/ 挙げてくださったpaper.jsのイグザンプルの中ではこれがすごくイメージに近い気がしました。 まだソースは読んでいないですが、とても楽しみです。
guest

回答2

0

パーリンノイズのジェネレータを試しに書いています。
(内部に時間を持たせたものに改良中)

単純に2次元に展開しただけだとブラウン運動に近いかな?(青線)
複合するとなんとなくよさげ。(赤線)

js

1<!DOCTYPE html> 2<meta charset="utf-8"> 3<title></title> 4<style> 5</style> 6 7<body> 8<canvas width="1000" height="900"></canvas> 9 10<script> 11 12class P2{ 13 constructor(x=0,y=0){this.x=x;this.y=y} 14 toArray(){return[this.x,this.y]}//単純配列化 15 clone(){return new this.constructor(this.x, this.y)}//複写 16 add({x=0,y=0},{x:X,y:Y}=this){this.x=X+x;this.y=Y+y;return this}//加算 17} 18 19//パーリンノイズ 20class PerlinNoise { 21 constructor (range = 1, pitch = .01) { 22 this.pitch = pitch; 23 this.range = range; 24 this.cnt = 0; 25 this.begin = this.nextRandom; 26 this.end = this.nextRandom; 27 } 28 29 get nextRandom () { 30 return (Math.random () -.5) * this.range; 31 } 32 33 valueOf () { 34 if (1 < (this.cnt += this.pitch)) 35 [this.cnt, this.begin, this.end] = [0, this.end, this.nextRandom]; 36 37 let 38 r0 = this.cnt, 39 u = r0 * this.begin, 40 v = (r0 - 1) * this.end, 41 st = r0 **2 * (3 - 2 * r0); 42 43 return 2 * (u + st * (v - u)); 44 } 45 46 clone (n = 1, m = n) { 47 return new this.constructor (this.range * n, this.pitch * m); 48 } 49} 50 51 52//パーリンノイズを複合したオブジェクト 53class compositePerlinNoise { 54 constructor (...pns) { 55 this.pns = pns; 56 } 57 58 clone (n = 1, m = n) { 59 return new this.constructor (...this.pns.map (ps=> ps.clone (m, n))); 60 } 61 62 valueOf () { 63 return this.pns.reduce ((a,b)=> a + b, 0); 64 } 65 66 static create (...param) { 67 return new this (...param.map (args=> new PerlinNoise (...args))) 68 } 69} 70 71//二次元に拡張したパーリンノイズ 72class PerlinNoise2D { 73 constructor (...args) { 74 this.args = args; 75 } 76 get x () { return this.args[0]; } 77 get y () { return this.args[1]; } 78 79 static create (...param) { 80 let 81 pnx = compositePerlinNoise.create (...param), 82 pny = pnx.clone (); 83 84 return new this (pnx, pny); 85 } 86} 87 88 89class Canvas { 90 91 constructor (canvas = document.querySelector ('canvas')) { 92 this.canvas = canvas; 93 this.ctx = canvas.getContext ('2d'); 94 } 95 96 static create (canvas = document.querySelector ('canvas')) { 97 let obj = new this (canvas); 98 return obj.cls (); 99 } 100 101 cls () { 102 // let {width, height}=this.canvas; this.ctx.clearRect(0,0,width,height); 103 this.canvas.width = this.canvas.width; 104 return this; 105 } 106 107 line (p0, p1, color = 'rgba(200,0,0,.5)', width = 1) { 108 let ctx = this.ctx; 109 ctx.beginPath (); 110 ctx.strokeStyle = color; 111 ctx.lineWidth = width; 112 ctx.moveTo (p0.x, p0.y); 113 ctx.lineTo (p1.x, p1.y); 114 ctx.closePath (); 115 ctx.stroke (); 116 return this; 117 } 118} 119 120//__________________________ 121 122 123let 124 cg = Canvas.create (), 125 prm0 = [[4,.002], [4,.004], [4, .005]], 126 pn0 = PerlinNoise2D.create (...prm0), 127 p0a = new P2 (500,400), p0b, 128 129 pn1 = PerlinNoise2D.create ([8,.005]), 130 p1a = new P2 (500,400), p1b; 131 132 133function demo () { 134 p0b = p0a.clone(); p0a.add (pn0); cg.line (p0a, p0b, 'rgba(255,0,0,.1)', 10); 135 p1b = p1a.clone(); p1a.add (pn1); cg.line (p1a, p1b, 'rgba(0,0,255,.2)', 10); 136 requestAnimationFrame (demo); 137} 138 139demo (); 140 141 142</script>

投稿2021/12/18 14:10

babu_babu_baboo

総合スコア616

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

以下いずれもProcessingのJava版ですが。

'Processing うねうね'でググるとこんなのが引っかかりました
http://processingnyumon.blog.jp/archives/3173539.html

'Processing worm'ではここがヒット
https://happycoding.io/examples/processing/animation/worms

虫ではないけれどこんなのも。
https://gist.github.com/p5info/5351768

気持ち悪さが足りないでしょうか。


速度を一定でなくしたいだけなら例えばこんな。Javascriptはよく知らないからあまり自信ない。
「もぞもぞ」感はないなぁ。

Processing

1//p5.js 2let x=0; 3let n=0; 4let dn=0.1; 5 6function setup() { 7 createCanvas(500,200); 8} 9 10 11function draw() { 12 background(0xcc); 13 let ns=noise(n); 14 text(ns,50,50); 15 x+=10*ns; 16 n+=dn; 17 circle(x,100,30); 18 if(x>width){ 19 x-=width; 20 } 21}

「胴体」を作ってみると虫っぽくなって、ちょっと「もぞもぞ」してきただろうか?

Processing

1//draw()のみ差し換え 2function draw() { 3 noStroke(); 4 background(0xcc); 5 x+=5*noise(n); 6 n+=dn; 7 for(let xx=0; xx<50; xx++){ 8 circle(x-xx,50+noise((x-xx)*0.03)*50,30); 9 if(x>width){ 10 x-=width; 11 } 12 } 13}

noiseって、私のイメージでは、凸凹のある地形図データベースを持っていて、その地図からある座標の高度を読み出す感じ(ノイズという言葉にはなんか当てはまらないけれど)。地形として連続性があって、細かいピッチで読み出せば「なだらか」に見えるし、荒いピッチで読み出せば比較的変化が急になる。
で、「どういうものか」という話と「どう使えば効果的か」という話はまったく別だったりする...

(「もぞもぞ」じゃなくて「もぞもぞっ」だったか...最後の'っ'で随分印象が変わる気がする)


もしかして、「線の中を虫が這い回る」ってこんなことなのかしら? 力尽きてきたのでJava版Processingで。p5.jsへの移植もそんなに難しくないと思うので。

Processing

1float xx; 2float y0=20;//上下線の間隔 3float ny=0; 4float ndy=0.01; 5float nx1=0; 6float ndx1=0.1; 7float ndx2=0.01; 8float cent; 9 10void setup() { 11 size(400, 200); 12 strokeWeight(3); 13 cent=height/2; //中心位置 14 stroke(0); 15 fill(0); 16} 17 18void draw() { 19 background(0xcc); 20 xx=xx+8*noise(nx1); 21 if (xx>width) { 22 xx=0; 23 } 24 float ddPrev=0; 25 for (int x=0; x<width; x++) { 26 float dd=max(y0*40/dist(xx, cent, x, cent+y0)*noise(x*ndx2, ny)-3, 0); 27 line(x-1, cent-y0-ddPrev, x, cent-y0-dd); 28 line(x-1, cent+y0+ddPrev, x, cent+y0+dd); 29 ddPrev=dd; 30 circle(xx, height/2, 20); 31 } 32 nx1+=ndx1; 33 ny+=ndy; 34}

投稿2021/12/18 01:41

編集2021/12/18 13:08
thkana

総合スコア7659

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

justmeet0924

2021/12/18 01:43

ありがとうございます。 チェックしてみます!
justmeet0924

2021/12/18 03:51

すみません、githubのこのソースってどうやって実行結果を見るのですか?
thkana

2021/12/18 04:35

githubのは普通に?Processing IDEに貼り付ければ実行できると思いますけれど、駄目ですか? (むしろwormのやつが一箇所行末の;が抜けてる)
justmeet0924

2021/12/18 04:39

ありがとうございます。 p5.jsと勘違いしてました。
justmeet0924

2021/12/18 14:05

回答ありがとうございます。 順次チェックしていこうと思います。 点の相互作用のコードはなかなか面白い動きで参考になる気がします。
justmeet0924

2021/12/18 14:06

「線の中を虫が這い回る」 そうです、その通りです。コードチェックしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問