ホームページ | Pirikaで化学 | ブログ | 業務案内 | お問い合わせ |
情報化学+教育トップ | 情報化学 | MAGICIAN | MOOC | プログラミング |
2022.2.24
Pirika.comでプログラミング
山本博志
光の3原色とか言う人間の勝手な言い方があります。
これは、目の錯覚というか、脳の錯覚です。
人間のセンサーとしての目が認識できる色が3種類しかないだけで、光の波長は連続に変化しています。
でも、そう言うことを言う「屁理屈やさん」は嫌われます。
円というものは2次元(平面の上にある)だけど、円のどこか一点を白にして段階的に色を変えると、3次元の球に見えます。
赤 | |
---|---|
緑 | |
青 | |
H | |
V |
いつものように、以下プログラムをメモ帳にコピペして、ColorTest.htmlという名前でセーブして遊んでみましょう。
完成形プログラム(▶︎をクリックして開く)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<canvas id="canvas" width="360" height="243" tyle="border:1px solid #CCC;"></canvas>
<div class="example-box">
<table>
<tr>
<th>赤</th>
<td><input id="slider" type="range" min="0" max="255" oninput="this.nextSibling.value = this.value" onchange="this.nextSibling.value = this.value" /><input id="Rval" type="text" size="3" value="255" /></td>
</tr>
<tr>
<th>緑</th>
<td><input id="slider1" type="range" value="0 " min="0" max="255" oninput="this.nextSibling.value = this.value" onchange="this.nextSibling.value = this.value" /><input id="Gval" type="text" size="3" value="0 "/></td>
</tr>
<tr>
<th>青</th>
<td><input id="slider2" type="range" value="0" min="0" max="255" oninput="this.nextSibling.value = this.value" onchange="this.nextSibling.value = this.value" /><input id="Bval" type="text" size="3" value="0 "/></td>
</tr>
<tr>
<th>H</th>
<td><input id="slider3" type="range" value="200" min="150" max="250" oninput="this.nextSibling.value = this.value" onchange="this.nextSibling.value = this.value" /><input id="Hval" type="text" size="3" value="200 "/></td>
</tr>
<tr>
<th>V</th>
<td><input id="slider4" type="range" value="0" min="50" max="100" oninput="this.nextSibling.value = this.value" onchange="this.nextSibling.value = this.value" /><input id="Vval" type="text" size="3" value="75 "/></td>
</tr>
</table>
</div>
<script type="text/javascript">
let S1Slider = document.getElementById('slider');//slider1のオブジェクトを取り出す。
S1Slider.addEventListener('input', inputChange);//変化(イベント)が起きたら、inputChange関数を呼ぶ。
let S2Slider = document.getElementById('slider1');
S2Slider.addEventListener('input', inputChange);
let S3Slider = document.getElementById('slider2');
S3Slider.addEventListener('input', inputChange);
let S4Slider = document.getElementById('slider3');
S4Slider.addEventListener('input', inputChange);
let S5Slider = document.getElementById('slider4');
S5Slider.addEventListener('input', inputChange);
S1Slider.value="255";
S2Slider.value="0";
S3Slider.value="0";
S4Slider.value="200";
S5Slider.value="75";
set_up();
function set_up()
{
canvas =document.querySelector("canvas");
ctx =canvas.getContext("2d");
inputChange(event);
//GetMyValue();
//MyDraw();
}
function inputChange(event){//スライダーに変化があったら呼ばれる。
MyRed=parseInt(S1Slider.value);//Slider.valueは文字列なので、paraseInt関数で整数に変換する。
MyGreen=parseInt(S2Slider.value);
MyBlue=parseInt(S3Slider.value);
MyHol=parseInt(S4Slider.value);
MyVer=parseInt(S5Slider.value);
MyColor="rgb("+MyRed+","+MyGreen+","+MyBlue+")";
MyDraw();
}
function MyDraw()
{
ctx.beginPath();
ctx.arc(175, 100, 100, 0, Math.PI*2, true);
var gradient2=ctx.createRadialGradient(MyHol,MyVer,10,200,75,75);
gradient2.addColorStop(0.0,"#EEEEEE");
gradient2.addColorStop(1.0,MyColor);
ctx.fillStyle = gradient2;
ctx.fill();
}
var MyRed;
var MyGreen;
var MyBlue;
var MyHol;
var MyVer;
var MyColor;
</script>
</body>
</html>
コンピュータでは色は、R(Red:赤)G(Green:緑)B(Blue:青)を0から255段階に変えて表現します。
そこで、256*256*256=16777216色作る事ができるとか言います。
(でも、白と黒は色ではありませんから正しくありません。屁理屈)
スライダーを動かして、色々な色を作ってみましょう。
H(Horizontal:水平)V(Vertical:垂直)を動かすと白く光らせる位置を変えます。どこにおいた時一番球に見えるかやってみましょう。
pirikaにおいてある分子模型は、皆、このテクニックで擬似的に3次元化しています。コンピュータが遅かった時の名残です。
マウスでドラッグすると回転、shiftキーとドラッグで拡大・縮小、Optionキーとドラッグで平行移動する事ができます。
何にせよ、3次元の絵を描くときには、色と光の方向は大事なものです。
Copyright pirika.com since 1999-
Mail: yamahiroXpirika.com (Xを@に置き換えてください) メールの件名は[pirika]で始めてください。