トロコイド歯車を手で描く
ポンプに使われるとコロイド歯車を CAD で作画します†
LANG: p5js_live
// =============== ここが設定
const gif_url = 'https://dora.bk.tsukuba.ac.jp/~takeuchi/?plugin=attach&refer=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%2FFusion360%2F%E3%83%88%E3%83%AD%E3%82%B3%E3%82%A4%E3%83%89%E6%AD%AF%E8%BB%8A%E3%82%92%E6%89%8B%E3%81%A7%E6%8F%8F%E3%81%8F&openfile=trochoid%20pump.gif';
const multi = 1; // スライダーは multi 回ループで最大値になる
const fps = 10; // 描画頻度 (frame per second)
const maxWidth = 600; // 横幅最大値
// ================ ここから下は汎用コード
let gif = null;
let frameSlider = null;
let w, h;
p.preload = () => gif = p.loadImage(gif_url);
const draw = () => {
let index = frameSlider.value();
gif.setFrame(index % gif.numFrames()); // フレームを選択して
p.image(gif, 0, 0, w, h); // 描画
}
p.setup = () => {
p.frameRate(fps);
w = Math.min(maxWidth, gif.width);
h = gif.height * w / gif.width;
p.createCanvas(w, h + 20);
frameSlider = p.createSlider(0, gif.numFrames() * multi - 1);
frameSlider.value(0);
frameSlider.position(0, h);
frameSlider.size(w);
frameSlider.input(draw);
draw();
}
p.draw = () => {
if(p.mouseIsPressed) return;
frameSlider.value((frameSlider.value() + 1) % (gif.numFrames() * multi));
draw();
}
回転中、歯車と歯車とが常に複数点で接しているため、歯車を回転させることで間に入り込んだ流体を移動させることができます。流入・流出口は手前や奥側に設けます。
外側の歯車を作成†
- 2つの基準円の直径は歯の枚数の比率で取る 100mm : 80mm = 5 : 4
- 2つの基準円は滑らずに転がるため回転数比は 4 : 5 になる
- 2つの基準円が接する点が小さい歯車に乗って移動する様子を大きな歯車から見た曲線を描く
- これには小さな歯車の中心点が回転することと、小さな歯車自身が回転することを取り込むことで行える
- この点の移動に沿って円の中心を動かした際の円周の包絡線が外側の歯車の歯形になる
- 1/5 のさらに 1/2 を描いたのがこちらの図
鏡面対称と円周パターンで全周の形状を得て、
適当なサイズのディスクからくりぬくことで外側歯車が得られる。
内側の歯車を作成†
内側の歯車の歯形は簡単には計算できないため、ディスク上の部材が外側の歯車と重なる部分を切り取ることで作成する。
内側歯車をすっぽり覆うディスクを作成し、外側歯車と重なる部分を切り取る。
2つの歯車を少し回してもう一度切り取る。
これを内側の歯車が 45°回るまで繰り返すと、右下の領域にほぼ完全な歯形が得られる。
これを複製することで全周の歯形が得られる。
そのままだと遊びがゼロなので、外側の歯車をオフセットして遊びを作る。
作業の様子†
LANG: p5js_live
// =============== ここが設定
const gif_url = 'https://dora.bk.tsukuba.ac.jp/~takeuchi/?plugin=attach&refer=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%2FFusion360%2F%E3%83%88%E3%83%AD%E3%82%B3%E3%82%A4%E3%83%89%E6%AD%AF%E8%BB%8A%E3%82%92%E6%89%8B%E3%81%A7%E6%8F%8F%E3%81%8F&openfile=trochoid%20pump%20draw2.gif';
const multi = 1; // スライダーは multi 回ループで最大値になる
const fps = 2; // 描画頻度 (frame per second)
const maxWidth = 600; // 横幅最大値
// ================ ここから下は汎用コード
let gif = null;
let frameSlider = null;
let w, h;
p.preload = () => gif = p.loadImage(gif_url);
const draw = () => {
let index = frameSlider.value();
gif.setFrame(index % gif.numFrames()); // フレームを選択して
p.image(gif, 0, 0, w, h); // 描画
}
p.setup = () => {
p.frameRate(fps);
w = Math.min(maxWidth, gif.width);
h = gif.height * w / gif.width;
p.createCanvas(w, h + 20);
frameSlider = p.createSlider(0, gif.numFrames() * multi - 1);
frameSlider.value(0);
frameSlider.position(0, h);
frameSlider.size(w);
frameSlider.input(draw);
draw();
}
p.draw = () => {
if(p.mouseIsPressed) return;
frameSlider.value((frameSlider.value() + 1) % (gif.numFrames() * multi));
draw();
}
質問・コメント†
添付ファイル:
Counter: 249 (from 2010/06/03),
today: 3,
yesterday: 2












