■default ---■fontsize --70% --80% --100% --120% --140% --- --■scroll_switch

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

//正方形と正円の面積の関係

昨日なんかごちゃごちゃ言ってたやつ解けました。
ありがとうございました。
一応したに式を書いておきます。
無駄な文がたくさん書いてありますが、気にしないでください。

ちなみに、これをコピーして「メモ帳」に貼り付けて
「 かまぼこの美味しいところはあえて食べない(ピンク).js 」
などの適当なファイル名にしてダブルクリックすると、
味気のないウインドウが出てきます。

ただ、なんつーか、本当はこの逆で比率から長さを求めたいのですが、それはもう少しあとのお話。




//正方形と正円の面積の関係

//下の二つだけ値を変える

var en_ln = 0.6;//円の辺の長さ 0から 0.71くらいまで、 0.707を超えると円が充填するので意味なし//Math.sqrt(2) * 0.5;//0.5;//Math.sqrt(2);
var hen_l = 1; //正方形の辺の長さ まあ、これは1のままでいいでしょう。
////////////////////////////////////////////
///////////////////////////////////////////
////////////////////////////////////////////
///////////////////////////////////////////
////////////////////////////////////////////
///////////////////////////////////////////
////////////////////////////////////////////


var keta = 10000 ;//桁数 1000で小数点以下3


var ans01 = 0; //正方形の面積
var ans02 = 0; //円の面積
var ans03 = 0; //かまぼこの面積
var ans04 = 0; //充填している面積

var ans05 = 0; //四角と円の比率
var ans06 = 0; //四角と四角の円で埋めているところの比率

////////////////////////////////////////////
///////////////////////////////////////////
////////////////////////////////////////////
main01();
//main02();

WScript.Echo (
"\r 正方形の辺の長さ:" + hen_l +
"\r 円の半径:" + en_ln +
"\r ----------" +
"\r 四角の面積:" + ans01 +
"\r 円形の面積:" + ans02 +
"\r かまぼこの面積:" + ans03 +
"\r 充填部分の面積:" + ans04 +
"\r ----------" +
"\r 四角と円の面積比率:" + ans05 +"%"+
"\r 四角と四角の円で埋めているところの面積比率:" + ans06 +"%"

) ;

//return;
////////////////////////////////////////////
///////////////////////////////////////////
////////////////////////////////////////////

function main01(){

ans01 = Math.pow(hen_l, 2);//四角の面積 hen_l * hen_l
ans02 = Math.PI * ( Math.pow(en_ln, 2) );//円の面積

squp = hen_l / 2 ; //正方形の上半分の長さ

//WScript.Echo (squp * Math.sqrt(2) );
//直線ax+by+c=0と、中心(x1,y1)で半径rの円の交点。
// hen_l /2 = y -> 0 = y - hen_l /2 -> 0 = (x*0) + (y*1) - (hen_l /2)
//cli(a,b,c,x1,y1,r){
if ( ( squp * Math.sqrt(2) ) < en_ln ){//四角形の対角線より半径が大きい場合 充填しているので計算不要
ans03 = 0;
ans04 = ans01;
}
else if ( squp >= en_ln){//四角形より半径が小さい 達していない計算不要
ans03 = 0;
ans04 = ans02;
}
else{
sessn = cli(0,1,(hen_l / 2) * (-1) ,0,0,en_ln);
kamaboko_igai = sessn[1].x * squp / 2;//ピザに切った1/8の「かまぼこを有した扇型」のかまぼこ以外の三角形のところの面積
//sessenmadenonagasa = Math.sqrt(Math.pow(sessn[1].x,2) + Math.pow(squp,2) ) ;//接線までの長さ ピタゴラスイッチ
sessenmadenonagasa = en_ln;//あほか接線までの距離は円の半径に決まってんだローが

k_k = kamaboko_kakudo(sessn[1].x,sessenmadenonagasa);////三角形 短いところ y と 長い辺 z の変を持つ三角形の角度

k_w = k_k / 360;//かまぼこを有する扇型の円に対する割合
//WScript.Echo (k_k );

ans03 = ((ans02 * k_w ) - kamaboko_igai) * 8 ;//扇型から三角形部分をカット+8個分あるのでかける
ans04 = ans02 - ans03;//充填している面積
}


//WScript.Echo ("x:" + sessn[1].x + " y:" + sessn[1].y );
//ans04 = kou_ten_basyo(hen_l,en_ln);
//ans04 = ans02 -


ans05 = ( Math.round (( ans02 / ans01) * keta ) / keta ) * 100 ;//面積比 パーセント
ans06 = ( Math.round (( ans04 / ans01) * keta ) / keta ) * 100 ;//面積比 パーセント

return;
}

///////////////////////////////////////////
////////////////////////////////////////////


function main02(){

return;
}



//1個=πr2乗-{πr2乗*(180-θ)/180+8r2乗}

///////////////////////////////////////////
////////////////////////////////////////////
//三角形 短いところ y と 長い辺 z の変を持つ三角形の角度
function kamaboko_kakudo(y,z){

dblRadian = Math.asin(y / z)
Dgr = dblRadian/(Math.PI/180);
return Dgr;

}
///////////////////////////////////////////
////////////////////////////////////////////
//直線ax+by+c=0と、中心(x1,y1)で半径rの円の交点。
function cli(a,b,c,x1,y1,r){
var l = a*a+b*b;
var k = a*x1+b*y1+c;
var d = l*r*r-k*k;
if(d>0){
var ds = Math.sqrt(d);
var apl = a/l;
var bpl = b/l;
var xc = x1-apl*k;
var yc = y1-bpl*k;
var xd = bpl*ds;
var yd = apl*ds;
return [
{x:xc-xd,y:yc+yd},
{x:xc+xd,y:yc-yd}
];
}else if(d==0){//接点の場合
return [{x:x1-a*k/l,y:y1-b*k/l}];
}else{//達していない
return [];
}
}
///////////////////////////////////////////
////////////////////////////////////////////
/*
function kou_ten_basyo(v,r){
var x=0;
var y=0;//円の中心位置

if( v.length > r ){
//距離が半径より大きい場合、交点なし
return [];
}
else if( v.length < r ){
//交点が2つ
var drad;//:Number;
var irad;//:Number;
if( dv.length>0 ){
//距離ベクトルの角度
drad = Math.atan2( v.y, v.x );
//距離ベクトルから交点の角度
irad = Math.acos( v.length/r );
}else{
drad = Math.atan2( b, a );
irad = Math.PI/2;
}
return [ new Point( x + r*Math.cos(drad+irad), y + r*Math.sin(drad+irad) ),
new Point( x + r*Math.cos(drad-irad), y + r*Math.sin(drad-irad) ) ];
}else{
//接線
v.offset( x, y );
return [ v ];
}
}
*/
///////////////////////////////////////////
////////////////////////////////////////////
スポンサーサイト
ブログ内検索ワード
マジック / フラリッシュ / デザイン / ~のコツ / プログラム関連 /
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。