pirika logo

ホームページ Pirikaで化学 ブログ 業務案内 お問い合わせ
情報化学+教育トップ 情報化学 MAGICIAN MOOC プログラミング
高校生レベルのプログラミングはMAGICIAN-Jrへどうぞ。
フィードバックはお問い合わせフォームからお願いします。

プログラミング・トップ > 化学,薬学系の親子で楽しみながらプログラミング > 第2時限:美術

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]で始めてください。