Page 200 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼直角三角形の作図 他 表計算 oyaji 16/02/29(月) 16:38 ┣Re(1):直角三角形の作図 他 表計算 ふゆ〜な〜 16/02/29(月) 22:11 ┃ ┣Re(2):直角三角形の作図 他 表計算 Fu〜 16/02/29(月) 23:40 ┃ ┃ ┗Re(3):直角三角形の作図 他 表計算 ふゆ〜な〜 16/03/01(火) 12:26 ┃ ┣Re(2):直角三角形の作図 他 表計算 ふゆ〜な〜 16/03/01(火) 13:19 ┃ ┗パラメトリックな寸法の図形は建具平断面または建具立面 kojima 16/03/01(火) 14:51 ┃ ┗Re(1):パラメトリックな寸法の図形は建具平断面または建具立面 oyaji 16/03/01(火) 18:05 ┣Re(1):直角三角形の作図 他 表計算 ふゆ〜な〜 16/02/29(月) 22:37 ┣Re(1):直角三角形の作図 他 表計算 kojima 16/03/01(火) 0:20 ┃ ┗Re(2):直角三角形の作図 他 表計算 oyaji 16/03/01(火) 18:17 ┃ ┗Re(3):直角三角形の作図 他 表計算 kojima 16/03/01(火) 18:59 ┃ ┗Re(4):直角三角形の作図 他 表計算 oyaji 16/03/02(水) 10:15 ┃ ┗Re(5):直角三角形の作図 他 表計算 kojima 16/03/02(水) 11:13 ┃ ┗Re(6):直角三角形の作図 他 表計算 oyaji 16/03/02(水) 14:11 ┃ ┗Re(7):直角三角形の作図 他 表計算 kojima 16/03/02(水) 19:04 ┃ ┗Re(8):直角三角形の作図 他 表計算 oyaji 16/03/02(水) 21:43 ┃ ┗??? kojima 16/03/03(木) 0:48 ┃ ┗Re(1):??? oyaji 16/03/03(木) 9:18 ┣底辺と高さの寸法を指示して直角三角形を書く方法 HiroCom777 16/03/02(水) 20:59 ┃ ┣Re(1):底辺と高さの寸法を指示して直角三角形を書く方法 oyaji 16/03/02(水) 23:05 ┃ ┃ ┗Re(2):底辺と高さの寸法を指示して直角三角形を書く方法 おせっかいな親父 16/03/03(木) 8:43 ┃ ┃ ┗Re(3):底辺と高さの寸法を指示して直角三角形を書く方法 oyaji 16/03/03(木) 11:26 ┃ ┗幾何学的な見地から大いなる勘違いしていました。 kojima 16/03/03(木) 0:39 ┃ ┗全ての角度・辺長も記入するようにした修正 kojima 16/03/03(木) 9:21 ┗複数の直角三角形の辺長一括記入・表作成 kojima 16/03/04(金) 22:09 ─────────────────────────────────────── ■題名 : 直角三角形の作図 他 表計算 ■名前 : oyaji ■日付 : 16/02/29(月) 16:38 -------------------------------------------------------------------------
いつもお世話になっており 感謝しております。 二つの質問をさせていただきます。 1.直角三角形を書く場合 1本ずつ線を書かないと書けないですよね。 ○ □ のコマンドはあるのに三角はないです。 底辺と高さの寸法を指示して直角三角形を書く方法なんて 有るのでしょうか。 2.Jwのコマンドに表計算があり、四則演算と範囲内合計ができますが、 他に三平方の定理とかを 新たに加えることは 出来ないでしょうか。 |
▼oyajiさん: 1の直角三角形ですが、手法としては線変形と図形で可能だと思います。 まず簡単な図形から、 縮尺1/で1:1の直角三角形を図形登録します。 基準点は直角の頂点にすると動かしやすいですね。 で、図形を 配置する時に、X,Yの寸法を倍率欄に入力しまして 配置したい場所をクリックすることで配置できます。 90°毎ボタンを押せば90°毎に回転して配置できますし。 マウス角度ボタンでマウスに追従した角度で配置出ます。 欠点は線色・種が固定されることかな 線変形は錆びついた頭なのでもうちょっと時間がかかりますm(__)m >いつもお世話になっており 感謝しております。 >二つの質問をさせていただきます。 > >1.直角三角形を書く場合 1本ずつ線を書かないと書けないですよね。 > ○ □ のコマンドはあるのに三角はないです。 > 底辺と高さの寸法を指示して直角三角形を書く方法なんて 有るのでしょうか。 > >2.Jwのコマンドに表計算があり、四則演算と範囲内合計ができますが、 > 他に三平方の定理とかを 新たに加えることは 出来ないでしょうか。 |
▼ふゆ〜な〜さん: >で、図形を ・ ・ ・ >欠点は線色・種が固定されることかな 図形の「作図属性」で,書込線色・線種などに変更できますよ〜〜 スゥッ・・・(^o^)y~~~ パァー ヾ(^_^)BYE Fu〜 |
そうですね 年かな?面目ない(^_^; ▼Fu〜さん: >▼ふゆ〜な〜さん: > > >>で、図形を >・ >・ >・ >>欠点は線色・種が固定されることかな > > >図形の「作図属性」で,書込線色・線種などに変更できますよ〜〜 > > > スゥッ・・・(^o^)y~~~ パァー ヾ(^_^)BYE > > Fu〜 > > |
昼休みに書いてみました 要望とは少し違うとおもいますが、線変形を利用したもの 下記のここから〜ここまでをテキストファイルへコピペして JWWのホルダーに保存してください。 ファイル名は線変形データ名に倣ってください(Jw_opt4q.dat等) ここから↓↓↓ #× # fuyounor 28 999 0 □× 760 8 8 05 05 0 0 8 8 0 0 -11 0 0 0 0 0 05 05 0 8 8 0 0 0 -11 0 0 0 0 0 08 00 0 0 0 360 7 1 -11 e 1.0 指示点位置ダミー 08 00 8 8 0 360 7 1 -11 e 1.0 倍率点位置ダミー 08 01 0 -4 10 -4 10000 702 -11 "2点指示線 998 0 直角三角形 760 8 8 05 05 0 0 8 8 0 0 -11 0 0 0 0 0 05 05 0 0 0 8 0 0 -11 0 0 0 0 0 05 05 0 8 8 8 0 0 -11 0 0 0 0 0 08 00 0 0 0 360 7 1 -11 e 1.0 指示点位置ダミー 08 00 8 8 0 360 7 1 -11 e 1.0 倍率点位置ダミー 08 01 0 -4 10 -4 10000 702 -11 "2点指示線 998 0 直角三角形 760 8 8 05 05 0 0 8 0 0 0 -11 0 0 0 0 0 05 05 0 0 0 8 0 0 -11 0 0 0 0 0 05 05 0 8 8 0 0 0 -11 0 0 0 0 0 08 00 0 0 0 360 7 1 -11 e 1.0 指示点位置ダミー 08 00 8 8 0 360 7 1 -11 e 1.0 倍率点位置ダミー 08 01 0 -4 10 -4 10000 702 -11 "2点指示線 998 ここまで ↑↑↑ メニューより→その他→戦記号変形をクリックすると2種類の使用法が現れます。 1番目は×を描くものです ▼ふゆ〜な〜さん: >▼oyajiさん: >1の直角三角形ですが、手法としては線変形と図形で可能だと思います。 >まず簡単な図形から、 >縮尺1/で1:1の直角三角形を図形登録します。 >基準点は直角の頂点にすると動かしやすいですね。 > >で、図形を >配置する時に、X,Yの寸法を倍率欄に入力しまして >配置したい場所をクリックすることで配置できます。 > >90°毎ボタンを押せば90°毎に回転して配置できますし。 >マウス角度ボタンでマウスに追従した角度で配置出ます。 > >欠点は線色・種が固定されることかな > > >線変形は錆びついた頭なのでもうちょっと時間がかかりますm(__)m > > >>いつもお世話になっており 感謝しております。 >>二つの質問をさせていただきます。 >> >>1.直角三角形を書く場合 1本ずつ線を書かないと書けないですよね。 >> ○ □ のコマンドはあるのに三角はないです。 >> 底辺と高さの寸法を指示して直角三角形を書く方法なんて 有るのでしょうか。 >> >>2.Jwのコマンドに表計算があり、四則演算と範囲内合計ができますが、 >> 他に三平方の定理とかを 新たに加えることは 出来ないでしょうか。 |
▼ふゆ〜な〜さん: >▼oyajiさん: >1の直角三角形ですが、手法としては線変形と図形で可能だと思います。 >まず簡単な図形から、 お節介ですが パラメトリックな寸法の図形は、線変形や図形は不向きです。 1方向のみ変化する場合は、「建具平面」「建具断面」 縦横の2方向に変化させる場合は「建具立面」です。 以下、建具立面データです。(ファイル名 jw_opt3z.dat) #直角三角形 1 999 2 直角三角形 1 1 0 0 0 10000 0 0 -11 1 2 0 0 0 0 0 0 -11 1 2 0 10000 0 0 0 0 -11 992 コマンド選択などの手間を考えると、 AUtoモードで四角形を描いて1本の対角線を引き、 不要な2本の線を左クリック右クリックを2回繰り返して 消したほうが手っ取り早いように思います。 |
ふゆ〜な〜さん Fu〜さん kojimaさん ありがとうございます。 ひとつの直角三角形を書くということで 皆さんそれぞれ考えていただき 改めて 凄いなあと実感しております。 実は私もふゆ〜な〜さん と同じように直角三角形を縦横1で図形登録しておいて、倍率指定で書くことを考えていました。 ワンクリックでも早く書くにはkojimaさんの 「四角形を描いて1本の対角線を引き、 不要な2本の線を左クリック右クリックを2回繰り返して 消したほうが手っ取り早いように思います。」がいいのかなあ--と。 でもkojimaさんのopt3にて三角形を書くことは閃きませんでした。 使わせていただきます。ありがとうございました。 |
▼oyajiさん: 2の三平方の定理で斜辺の長さを算出する方法ですが、 メニュー→その他→式計算を利用します。 JWWのフォルダーにある下記2つのファイルを書き換えます KEISAN.JWM(メニュー) KEISAN3.JWM(元ににしますので別名(keisan5.jwm)で登録します) KEISAN.JWMの1行目を次のように追加して書き換えて下さい。 |日影倍率|ヘロン公式|三斜面積計算|RC 断面算定| ↓↓↓ |日影倍率|ヘロン公式|三斜面積計算|RC 断面算定|斜面の長さ| 詳しくはKWISAN.JWMを読んで下さい。 KESAN3.JWMをKEISAN4.JWNで別名保存して開きます 中身を次のように変更します。(細かいところは省きます) <1> S=A*B/2; #三斜面積計算 ここを下のように書き換えます <1> S=q(A^2+B^2); #斜辺長さ計算 これで保存すると 2辺の長さを入力すると斜辺の長さが計算されます。 後は文言などを好きな様に改造すれば宜しいかと ではでは >いつもお世話になっており 感謝しております。 >二つの質問をさせていただきます。 > >1.直角三角形を書く場合 1本ずつ線を書かないと書けないですよね。 > ○ □ のコマンドはあるのに三角はないです。 > 底辺と高さの寸法を指示して直角三角形を書く方法なんて 有るのでしょうか。 > >2.Jwのコマンドに表計算があり、四則演算と範囲内合計ができますが、 > 他に三平方の定理とかを 新たに加えることは 出来ないでしょうか。 |
▼oyajiさん: >いつもお世話になっており 感謝しております。 >二つの質問をさせていただきます。 > >1.直角三角形を書く場合 1本ずつ線を書かないと書けないですよね。 > ○ □ のコマンドはあるのに三角はないです。 > 底辺と高さの寸法を指示して直角三角形を書く方法なんて 有るのでしょうか。 正三角形は、「多角形」コマンドで角数に3を入力します。 直角三角形は、□コマンドで長方形を描いて パラメトリック変形で 1角を囲って他の角まで変形させます。 この方法が一番速いと思います。 >2.Jwのコマンドに表計算があり、四則演算と範囲内合計ができますが、 > 他に三平方の定理とかを 新たに加えることは 出来ないでしょうか。 以下のスクリプトの入力フォームの数式欄に hypot(a1,a2) と記入してください。 文字位置に注意してください。高さが1mmずれると計算されません。 @REM 表計算(レコード単位の数式計算) @echo off REM #jww REM #cd REM #zc REM #h3 REM #0計算結果記入位置を指示してください free(L) Read(R) REM #c小数点以下有効桁数 無指定:3/_/a REM #k端数の処理|1)四捨五入(L)|2)切捨て(R)|3)切上げ|/_/b REM #bz REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 %2 > jwc_temp.txt goto end #!ruby -Ks include Math keta=3 while ARGV.size>1 case argument=ARGV.pop when /\/a/ keta=argument[2..-1].to_i when /\/b/ hasu=argument[2..-1] end end def ika(keta,hasu,suti) if hasu == "1" a=(suti*10**keta).round/10**keta.to_f elsif hasu == "2" a=(suti*10**keta).floor/10**keta.to_f else a=(suti*10**keta).ceil/10**keta.to_f end b=$' if a.to_s=~/\./ a=$`+"."+b+"0"*(keta-b.size) if b.size<keta return a end moji_data1=[] while ARGF.gets xy=split if xy[0]=~/^ch/ moji=$'.chomp if $_=~/\"/ moji_data1<<[xy[1].to_f,xy[2].to_f,moji] end end moji_data1.sort!{|a,b|b[1]==a[1] ? a[0]<=>b[0] : b[1]<=>a[1]} moji_data=[] while a=moji_data1.shift b=moji_data1.select{|item|a[1].to_i==item[1].to_i} if b && b.size>0 moji_data1 -= b b.unshift(a) moji_data<<b end end $susiki="" begin open("数式.txt","r"){|f| line=f.gets $susiki=line.chomp } rescue end que=moji_data[0] $word="";word2="a1" (que.size).times{$word += word2+" " word2=word2.succ } require 'vr/vruby' require 'vr/vrcontrol' module Frm_form1 def _form1_init self.caption = 'form1' self.move(287,249,409,208) addControl(VRButton,'button1',"数式計算",16,136,120,32,1350565888) addControl(VRButton,'button2',"行合計",141,136,120,32,1350565888) addControl(VRButton,'button3',"行乗算",266,136,120,32,1350565888) addControl(VREdit,'edit2',"",16,96,368,24,1342177408) addControl(VRStatic,'static1',"列数・列名",16,8,96,24,1342177792) addControl(VRStatic,'static2',"数式",16,72,40,24,1342177792) addControl(VREdit,'edit1',"",16,32,368,24,1342177408) @edit1.text=$word @edit2.text=$susiki end def construct _form1_init end def button1_clicked $susiki=@edit2.text open("数式.txt","w"){|f|f.puts $susiki} close end def button2_clicked $susiki=1 close end def button3_clicked $susiki=2 close end end VRLocalScreen.start Frm_form1 anser=[] moji_data.each{|item| word="a1";y=item[0][1] i=1 while i<=item.size eval("a#{i} = 0") i += 1 end if $susiki==1 c=item[0][2].to_f item[1..-1].each{|item2|c += item2[2].to_f} elsif $susiki==2 c=item[0][2].to_f item[1..-1].each{|item2|c *= item2[2].to_f} else item.each{|item2|eval(word+" = item2[2].to_f") word=word.succ } c=eval($susiki) end c=ika(keta,hasu,c) anser<<[y,c] } puts "bz" anser.each{|a,b|$stdout.printf("ch 0 %.11f 1 0 \"%s\n",a,b)} __END__ :end |
▼kojimaさん: お世話になり ありがとうございます。 私の知識不足で 「以下のスクリプトの入力フォームの数式欄に hypot(a1,a2) と記入してください。 文字位置に注意してください。高さが1mmずれると計算されません。」とは 全く解らない状態で止まってしまっている状態です。 メモ帳にコピペして名前つけて拡張子をbatで保存しただけでは ダメなんですよね。 ご教授を宜しくお願いします。 |
V/rubyが使える環境であることが前提になります。 コピペ後、全角スペースを半角スペースに一括置換してください。 外変コマンドで バッチファイルをダブルクリック。 文字を範囲選択して、計算結果の記入位置を指示。 コントールバーの入力覧の指示に従ってオプションを入力。 数式入力のフォームが表示されます。(列数・列名の欄はa1 a2と記入済) 数式の入力欄に hypot(a1,a2) と入力して、「数式計算」ボタンをクリック。 指示した位置に三平方の定理の値が記入されます。 hypot(a1,a2)は、三平方の定理の値を返すRubyの関数。 斜辺の長さ(a1)と底辺の長さ(a2)から高さを求める数式は、sqrt(a1**2-a2**2)です。 2乗は、^2ではなく、**2です。 |
▼kojimaさん: 大変お世話をお掛けしております。 朝からさわっていたのですが、ギブアップ 出来ません。 >V/rubyが使える環境であることが前提になります。 Ruby2.2.4-p230をインスト-ルするだけではダメなのでしょうか。 今までkojimaさんに作って頂いた外変はうまく動作しています。 >コピペ後、全角スペースを半角スペースに一括置換してください。 スクリプトは まんま コピペ後、全角スペースを半角スペースに一括置換 REMの前にあるスペ-スは削除にてbatファイルとして名前つけて保存。 >数式入力のフォームが表示されます。(列数・列名の欄はa1 a2と記入済) 数式入力のフォームが表示されません。 と こんな具合です。 やはり知識がないと無理ですかね。 |
▼oyajiさん: >>V/rubyが使える環境であることが前提になります。 >Ruby2.2.4-p230をインスト-ルするだけではダメなのでしょうか。 >今までkojimaさんに作って頂いた外変はうまく動作しています。 V/rubyは、Ruby2.2.4-p230には同梱されていません。 oyajiさんには、数年前に、Ruby186-26.exeを紹介してインストールしてもらった記憶があるのですが? すっかり、そのつもりでいました。 この外部変形じたいが、数年前のものですし。 現在、Ruby186-26.exeをDLできるサイトはありません。 V/rubyが同梱されているのは、ActiveScriptRuby(1.8.7-p330--with-winsock2--enable-tcltk-stub)だけかも? https://www.artonx.org/data/asr/ ただし、Ruby2.2.4-p230がインストール済みだとそっちが優先されるので、path の設定変更等が必要になる? |
▼kojimaさん: 大変お世話をお掛けしております。 ruby2.3は破棄し ruby1.8へとバ-ジョンダウンして C:\Program Files\ruby-1.8\bin にpathを通したのですが 今回のものだけ動作しません。 今までkojimaさんに作って頂いた外変はうまく動作しています。 私の使い方が悪いのでしょうか。 例えば ある表があって 1行目の1列目に 3 1行目の2列目に 4 ここでkojimaさんの外変を使用して 1行目の3列目を指定し 5 となるのでしょうか。 何か他に思い当たることがあればご指摘を 宜しくお願いします。 |
数式入力用のフォームが表示されないのであれば V/rubyが同梱されていないのでしょう。 フォームを使わず、コマンドプロンプト画面に入力するように変更しました。 Ruby1.9以降でも動作します。 コマンドプロンプト画面に表示されるメッセージにしたがって 数式を入力してEnterを押してください。 ※三平方の定理の数式は、hypot(a1,a2) ※図面中の文字は、高さが同じものが1グループになります。表は関係ありません。 (文字だけの選択、表は選択されない) 高さが1mm以上ズレると別のグループになって計算の対象になりません。 @REM 表計算(レコード単位の数式計算) @echo off REM #jww REM #cd REM #h3 REM #0計算結果記入位置を指示してください free(L) Read(R) REM #c小数点以下有効桁数 無指定:3/_/a REM #k端数の処理|1)四捨五入(L)|2)切捨て(R)|3)切上げ|/_/b REM #bz REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 %2 > jwc_temp.txt goto end #!ruby -Ks include Math keta=3 while ARGV.size>1 case argument=ARGV.pop when /\/a/ keta=argument[2..-1].to_i when /\/b/ hasu=argument[2..-1] end end def ika(keta,hasu,suti) if hasu == "1" a=(suti*10**keta).round/10**keta.to_f elsif hasu == "2" a=(suti*10**keta).floor/10**keta.to_f else a=(suti*10**keta).ceil/10**keta.to_f end if keta==0 a=a.to_i.to_s else b=$' if a.to_s=~/\./ a=$`+"."+b+"0"*(keta-b.size) if b.size<keta end return a end moji_data1=[] while ARGF.gets xy=$_.split if xy[0]=~/^ch/ moji=$'.chomp if $_=~/\"/ moji_data1<<[xy[1].to_f,xy[2].to_f,moji] end end moji_data1.sort!{|a,b|b[1]==a[1] ? a[0]<=>b[0] : b[1]<=>a[1]} moji_data=[] while a=moji_data1.shift b=moji_data1.select{|item|a[1].to_i==item[1].to_i} if b && b.size>0 moji_data1 -= b b.unshift(a) moji_data<<b end end $susiki="" begin open("数式.txt","r"){|f| line=f.gets $susiki=line.chomp } rescue end que=moji_data[0] $word="";word2="a1" (que.size).times{$word += word2+" " word2=word2.succ } STDERR.puts "列数・列名 #{$word}" STDERR.puts "数式を入力してください 無指定:#{$susiki}" susiki=STDIN.gets.chomp if susiki!="" $susiki=susiki open("数式.txt","w"){|f|f.puts $susiki} end a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;a8=0;a9=0;a10=0 anser=[] moji_data.each{|item| word="a1";y=item[0][1] i=1 while i<=item.size eval("a#{i} = 0") i += 1 end item.each{|item2|eval(word+" = item2[2].to_f") word=word.succ } c=ika(keta,hasu,eval($susiki)) anser<<[y,c] } puts "bz" anser.each{|a,b|$stdout.printf("ch 0 %.11f 1 0 \"%s\n",a,b)} __END__ :end |
▼kojimaさん: お世話をおかけしております。 >フォームを使わず、コマンドプロンプト画面に入力するように変更しました。 申し訳ありません。上記の意味が全くわかりません。 cmd.exeのあの画面ですよね。 私の知識不足です。 「いくつかの三角形の底辺と高さを 測定コマンドにて表にそれぞれ書き入れて それぞれの三角形の斜辺を求める」ということがしたいのですが、 一旦 excelへ持っていかないとダメかな--と思いついたので 質問させていただきました。 excelでやってみます。 kojima様 大変大変お手数をお掛けしてすいませんでした。 ありがとうございました。 |
▼oyajiさん: >「いくつかの三角形の底辺と高さを 測定コマンドにて表にそれぞれ書き入れて >それぞれの三角形の斜辺を求める」ということがしたいのですが、 >一旦 excelへ持っていかないとダメかな--と思いついたので ハアー??? 斜辺も測定コマンドで測定しないのですか? 訳が分かりません。 |
▼kojimaさん: 大変お世話になっており ありがとうございます。 ふゆ〜な〜さん に作っていただいた keisan5.jwm(式計) は 1ふたつの数値を入れて斜辺の寸法が出る 2.ふたつの数値を囲んで斜辺の寸法が出る と いうもので 1個ずつ計算させなくてはならないですよね。 表題の2の質問事項に書きましたが Jwのコマンドに表計があり、四則演算と範囲内合計ができますが、 他に三平方の定理とかを 新たに加えることは 出来ないでしょうか。 コマンドの 表計 の四則演算のように A郡とB郡にて斜辺の寸法を出したいということなんですが、 解っていただけたでしょうか。 文面たらずで すいません。文章で伝えるのはつくづく難しいと実感しております。 宜しくお願いします。 |
HiroCom777です。お世話になります。 底辺と高さの寸法を指示して直角三角形を書く方法です。 1.横に底辺、縦に高さの寸法の長方形を描きます 2.底辺の寸法の辺のうちどちらかを直径とした円を描きます。 3.円ともう片方の底辺の寸法との交点2つのうちどちらかを選び そこから円の直径の両端に2本の線を描きます。 4.余計な線と縁を消して出来上がり。 ご確認ください。 |
▼HiroCom777さん: 投稿ありがとうございます。 ごめんなさい どうも理解に苦しんでおります。 >1.横に底辺、縦に高さの寸法の長方形を描きます とは □コマンドにて寸法指定して長方形を書くということですよね。 以下の >2.底辺の寸法の辺のうちどちらかを直径とした円を描きます。 >3.円ともう片方の底辺の寸法との交点2つのうちどちらかを選び >そこから円の直径の両端に2本の線を描きます。 >4.余計な線と縁を消して出来上がり。 が 解りません。 長方形が書けたなら対角線を引いて後はいらない2線を消す でいいのでは。 |
▼oyajiさん: >ごめんなさい どうも理解に苦しんでおります。。 >長方形が書けたなら対角線を引いて後はいらない2線を消す でいいので 貴方の提起した 底辺が直角三角形の斜辺ならば 下記の定理で頂角が90度の三角形が作図できます 中学ぐらいで勉強したと思います 円の直径の両端と円周上の任意の点を結んでで きる三角形は必ず直角三角形になる 底辺を作図します 底辺の中点を中心として底辺を直径とする円作図 底辺の複線(平行線)を高さの幅で作図 この複線と円の交点 (どちらか1点)と底辺の両端を結べば 底辺と高さを指定した直角三角形が作図できるということです hiroCom777氏と同じです クロック操作で作図すれば 簡単にできますよ 1 hits |
▼おせっかいな親父さん: 投稿ありがとうございます。 ボ-ルは今 私にあるようなので投稿させていただきます。 「底辺が直角三角形の斜辺ならば」からの作図方法とは 気づきませんでした。hiroCom777さん 失礼しました。 直角三角形を書くだけのことで こんなに盛り上がっていただけるとは・・・。 単に 「JWのコマンドに○ □ はあるのに三角はないのかなあ」と 思った次第です。 人それぞれ書き方があるなあとホント思います。 正確に書く ワンクリックでも早く書くことを日頃 考えます。 最初に覚えた作図方法を繰り返していると 例え別の方法が 簡単なんだと解っていても、 又 その方法で作図してしまい、その癖から抜けだせません。 皆さん どうでしょう。 このへんで締めとさせていただきます。 皆さん ありがとうございました。 また 宜しくお願いします。 |
幾何学的にみて、大いなる勘違いをしていました。 幾何学的には以下のようなことを 底辺と高さを指定して直角三角形を描くというのですね。 外部変形にしてみました。 @REM 底辺(斜辺)の長さと高さを指定して直角三角形の描画 @echo off REM #jww REM #cd REM #h0 REM #c底辺の長さ 無指定1000/_/a REM #c高さ(底辺の1/2以下) 無指定500/_/b REM #0 REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 %2> jwc_temp.txt pause goto end #!ruby -Ks include Math d=1000;h=500 while ARGV.size>1 case argument=ARGV.pop when /\/a/ d=argument[2..-1].to_f when /\/b/ h=argument[2..-1].to_f end end if h>d/2 STDERR.puts "作図できません" exit end r=d/2 l=sqrt(r**2-h**2) arg=atan2(h,l) px,py=r*cos(arg),r*sin(arg) x1,y1=-1*r,0 x2,y2=r,0 puts "lt1" printf(" %.11f %.11f %.11f %.11f\n",x1,y1,px,py)#辺1 printf(" %.11f %.11f %.11f %.11f\n",x2,y2,px,py)#辺2 printf(" %.11f %.11f %.11f %.11f\n",x1,y1,x2,y2)#底辺 puts "lc9","lt9" printf(" %.11f %.11f %.11f %.11f\n",px,py,px,0)#垂線 puts "cc7" printf("ch %.11f %.11f 1 0 \"#{d}\n",0,0) puts "cc1" printf("ch %.11f %.11f 0 1 \"#{h}\n",px,py/2) l=50 arg1=atan2(y1-py,x1-px) arg2=atan2(y2-py,x2-px) px1=px+l*cos(arg1);py1=py+l*sin(arg1) px2=px1+l*cos(arg2);py2=py1+l*sin(arg2) px3=px+l*cos(arg2);py3=py+l*sin(arg2) puts "lt1" printf(" %.11f %.11f %.11f %.11f\n",px1,py1,px2,py2)#直角表示線 printf(" %.11f %.11f %.11f %.11f\n",px3,py3,px2,py2)#直角表示線 __END__ :end |
全ての角度・辺長も記入するようにした修正版。 @REM 底辺(斜辺)の長さと高さを指定して直角三角形の描画 @echo off REM #jww REM #cd REM #h0 REM #c底辺の長さ 無指定1000/_/a REM #c高さ(底辺の1/2以下) 無指定500/_/b REM #0 REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 %2> jwc_temp.txt pause goto end #!ruby -Ks include Math d=1000;h=500 while ARGV.size>1 case argument=ARGV.pop when /\/a/ d=argument[2..-1].to_f when /\/b/ h=argument[2..-1].to_f end end if h>d/2 STDERR.puts "作図できません" exit end r=d/2 l=sqrt(r**2-h**2) arg=atan2(h,l) px,py=r*cos(arg),r*sin(arg) x1,y1=-1*r,0 x2,y2=r,0 puts "lc3","lt1" printf(" %.11f %.11f %.11f %.11f\n",x1,y1,px,py)#辺1 printf(" %.11f %.11f %.11f %.11f\n",x2,y2,px,py)#辺2 printf(" %.11f %.11f %.11f %.11f\n",x1,y1,x2,y2)#底辺 puts "lc9","lt9","pn9" printf("pt 0 0\n")#原点 printf(" %.11f %.11f %.11f %.11f\n",px,py,px,0)#垂線 printf("ci 0 0 %.11f\n",r)#円 printf(" %.11f %.11f %.11f %.11f\n",x1,0,x1,py) printf(" %.11f %.11f %.11f %.11f\n",x2,0,x2,py) printf(" %.11f %.11f %.11f %.11f\n",x1,py,x2,py) puts "cc7" printf("ch %.11f %.11f 1 0 \"L=#{d}\n",0,0) puts "cc1" printf("ch %.11f %.11f 0 1 \"H=#{h}\n",px,py/2) puts "cc5" printf("ch %.3f %.3f 1 0 \"%.3f°\n",x1,y1,(atan2(h,r+l)*180/PI)) puts "cc3" printf("ch %.3f %.3f 1 0 \"%.3f°\n",x2,y2,(atan2(h,r-l)*180/PI)) puts "cc1" l2=hypot(py-y1,px-x1) arg2=atan2(py-y1,px-x1) t_x1=x1+l2/2*cos(arg2) t_y1=y1+l2/2*sin(arg2) printf("ch %.11f %.11f %.11f %.11f \"%.3f\n",t_x1,t_y1,cos(arg2),sin(arg2),l2) l3=hypot(y2-py,x2-px) arg3=atan2(y2-py,x2-px) t_x2=px+l3/2*cos(arg3) t_y2=py+l3/2*sin(arg3) printf("ch %.11f %.11f %.11f %.11f \"%.3f\n",t_x2,t_y2,cos(arg3),sin(arg3),l3) printf("ch 0 0 1 0 \"0,0\n") l=r/10 arg1=atan2(y1-py,x1-px) arg2=atan2(y2-py,x2-px) px1=px+l*cos(arg1);py1=py+l*sin(arg1) px2=px1+l*cos(arg2);py2=py1+l*sin(arg2) px3=px+l*cos(arg2);py3=py+l*sin(arg2) puts "lt1" printf(" %.11f %.11f %.11f %.11f\n",px1,py1,px2,py2)#直角表示線 printf(" %.11f %.11f %.11f %.11f\n",px3,py3,px2,py2)#直角表示線 arg2=atan2(py-y1,px-x1) printf("ci %.11f %.11f %.11f 0 %.11f 1 0\n",x1,y1,l,arg2*180/PI) arg3=atan2(py-y2,px-x2) printf("ci %.11f %.11f %.11f %.11f 180 1 0\n",x2,y2,l,arg3*180/PI) __END__ :end |
@REM 複数の直角三角形の辺長一括記入・表作成 @echo off REM #jww REM #cd REM #c線と文字の離れ(図寸) 無指定:1mm/_/a REM #h1 REM #1一覧表作成位置を指示 L(free) R(Read) REM #hp REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 > jwc_temp.txt pause exit #!ruby -Ks include Math #sen1とsen2と延長線上の交点を返す def sen_sen_kouten(sen1,sen2) sen1x=sen1[2]-sen1[0] sen1y=sen1[3]-sen1[1] sen1xy=sqrt(sen1x**2+sen1y**2) sen1_arg=atan2(sen1y,sen1x) x1_1=sen1[0] x1_2=sen1[0]+sen1xy y1_1=sen1[1] y1_2=sen1[1] x=sen2[0]-sen1[0] y=sen2[1]-sen1[1] xy=sqrt(x**2+y**2) arg=atan2(y,x) henkaku=arg-sen1_arg x2_1=sen1[0]+xy*cos(henkaku) y2_1=sen1[1]+xy*sin(henkaku) x=sen2[2]-sen1[0] y=sen2[3]-sen1[1] xy=sqrt(x**2+y**2) arg=atan2(y,x) henkaku=arg-sen1_arg x2_2=sen1[0]+xy*cos(henkaku) y2_2=sen1[1]+xy*sin(henkaku) x=x2_2-x2_1 y=y2_2-y2_1 delta=y/x y=y1_1-y2_1 dx=y/delta kouten_x=x2_1+dx kouten_y=y1_1 x=kouten_x-x1_1 kouten_xt=x1_1+x*cos(sen1_arg) kouten_yt=y1_1+x*sin(sen1_arg) return [kouten_xt,kouten_yt] end #単独線・連続線・閉鎖図形の区分け def loop_renzoku(sen) a=sen.shift renzoku=[a] begin b=sen.find{|item2|[item2[0],item2[1]]==[a[2],a[3]] or [item2[2],item2[3]]==[a[2],a[3]]} if b if renzoku[-1][2]==b[0] && renzoku[-1][3]==b[1] a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]] elsif renzoku[-1][2]==b[2] && renzoku[-1][3]==b[3] a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7]] end sen.delete_if{|item2|item2==b} renzoku<<a end end while(b) if renzoku[-1][2]==renzoku[0][0] && renzoku[-1][3]==renzoku[0][1] return [3,renzoku] else begin a=renzoku[0] b=sen.find{|item2|[item2[0],item2[1]]==[a[0],a[1]] or [item2[2],item2[3]]==[a[0],a[1]]} if b if renzoku[0][0]==b[0] && renzoku[0][1]==b[1] a=[b[2],b[3],b[0],b[1],b[4],b[5],b[6],b[7]] elsif renzoku[0][0]==b[2] && renzoku[0][1]==b[3] a=[b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]] end sen.delete_if{|item2|item2==b} renzoku.unshift(a) end end while(b) if renzoku.size>1 return [2,renzoku] else return [1,renzoku] end end end #線間の角度を返す def kakudo_return(sen1,sen2) arg1=atan2(sen1[1]-sen1[3],sen1[0]-sen1[2]) arg2=atan2(sen2[3]-sen2[1],sen2[2]-sen2[0]) kakudo=((arg2-arg1)*180/PI).round.abs return kakudo end #直角三角形か否か? def t_angl(renzoku) if renzoku.size !=3 return 0 end kakudo1=kakudo_return(renzoku[0],renzoku[1]) kakudo2=kakudo_return(renzoku[1],renzoku[2]) kakudo3=kakudo_return(renzoku[2],renzoku[0]) if kakudo1==90 or kakudo2==90 or kakudo3==90 return 1 elsif kakudo1==270 or kakudo2==270 or kakudo3==270 return 1 else return 0 end end #三角形の図心座標を返す def tyusin_zahyo(renzoku) l1=hypot(renzoku[0][3]-renzoku[0][1],renzoku[0][2]-renzoku[0][0]) arg1=atan2(renzoku[0][3]-renzoku[0][1],renzoku[0][2]-renzoku[0][0]) x1=renzoku[0][0]+l1/2*cos(arg1) y1=renzoku[0][1]+l1/2*sin(arg1) l2=hypot(renzoku[1][3]-renzoku[1][1],renzoku[1][2]-renzoku[1][0]) arg2=atan2(renzoku[1][3]-renzoku[1][1],renzoku[1][2]-renzoku[1][0]) x2=renzoku[1][0]+l2/2*cos(arg2) y2=renzoku[1][1]+l2/2*sin(arg2) sen1=[x1,y1,renzoku[1][2],renzoku[1][3]] sen2=[x2,y2,renzoku[2][2],renzoku[2][3]] return sen_sen_kouten(sen1,sen2) end #線の上に文字を書く def ch_write_online(sen1,str,hanare,zusun) l=hypot(sen1[3]-sen1[1],sen1[2]-sen1[0]) arg=atan2(sen1[3]-sen1[1],sen1[2]-sen1[0]) x=sen1[0]+l/2*cos(arg)+hanare*zusun*cos(arg+PI/2) y=sen1[1]+l/2*sin(arg)+hanare*zusun*sin(arg+PI/2) puts "cc1" printf("ch %.11f %.11f %.11f %.11f \"%s\n",x,y,cos(arg),sin(arg),str) end #sen1を水平に変換した時のsen2の角度を返す def arg_m(sen1,sen2) arg1=atan2(sen1[3]-sen1[1],sen1[2]-sen1[0]) arg2=atan2(sen2[1]-sen1[1],sen2[0]-sen1[0]) l2=hypot(sen2[1]-sen1[1],sen2[0]-sen1[0]) arg3=atan2(sen2[3]-sen1[1],sen2[2]-sen1[0]) l3=hypot(sen2[3]-sen1[1],sen2[2]-sen1[0]) x1=sen1[0]+l2*cos(arg2-arg1) y1=sen1[1]+l2*sin(arg2-arg1) x2=sen1[0]+l3*cos(arg3-arg1) y2=sen1[1]+l3*sin(arg3-arg1) return atan2(y2-y1,x2-x1) end #sen1とsen2で成る三角形の面積を返す def sankaku_s(sen1,sen2) #ヘロンの公式 #a b cは、各辺の長さ #s=(a+b+c)/2 #面積S=sqrt(s*(s-a)*(s-b)*(s-c)) a=hypot(sen1[3]-sen1[1],sen1[2]-sen1[0]) b=hypot(sen2[3]-sen2[1],sen2[2]-sen2[0]) c=hypot(sen2[3]-sen1[3],sen2[2]-sen1[2]) s=(a+b+c)/2 if arg_m(sen1,sen2) < 0 return sqrt(s*(s-a)*(s-b)*(s-c))*-1 else return sqrt(s*(s-a)*(s-b)*(s-c)) end end puts "cc3";hanare=1.0;col_x=35;gyo=7 while ARGV.size>1 case argument=ARGV.pop when /\/a/ hanare=argument[2..-1].to_f end end sen=[];by=[];hch=[];moji_a=[] while ARGF.gets xy=$_.split if xy[0]=~/^hs/ xy[1..-1].each{|item|by<<item.to_i} end if xy[0]=~/^lg/ zusun=by[xy[0][2,1].hex] end if xy[0]=~/^hch/ xy.each{|item|hch<<item.to_f} end if xy[0]=~/^cn\d+$/ if xy.size==4 moji_h=xy[2].to_f else moji_h=hch[xy[0][2..-1].to_i] end end if xy[0]=~/^hp1/ hpx=xy[1].to_f hpy=xy[2].to_f end if xy[0]=~/^\d|^-/ xy.collect!{|item|item.to_f} sen<<xy end end if moji_h+2>gyo gyo=moji_h+2 end moji_x=hpx;moji_y=hpy str_a=%w(a b c) puts "cc1" printf("ch %.11f %.11f 1 0 \"NO\n",moji_x,moji_y+hanare*zusun) moji_x+=col_x*zusun str_a.each{|item| printf("ch %.11f %.11f 1 0 \"#{item}\n",moji_x,moji_y+hanare*zusun) moji_x+=col_x*zusun } printf(" %.11f %.11f %.11f %.11f\n",hpx-col_x/2*zusun,moji_y+gyo*zusun,hpx+col_x*3.5*zusun,moji_y+gyo*zusun) printf(" %.11f %.11f %.11f %.11f\n",hpx-col_x/2*zusun,moji_y,hpx+col_x*3.5*zusun,moji_y) no=1;moji_y-=gyo*zusun while sen.size>0 zukei=loop_renzoku(sen) i=zukei[0] renzoku=zukei[1] next if i==1 s=sankaku_s(renzoku[0],renzoku[1]) j=t_angl(renzoku) if j==1 x,y=tyusin_zahyo(renzoku) puts "cc4" printf("ch %.11f %.11f 1 0 \"%d\n",x,y,no) printf("ci %.11f %.11f %.11f\n",x,y,(gyo)/2*zusun) renzoku.sort!{|a,b| la=hypot(a[3]-a[1],a[2]-a[0]) lb=hypot(b[3]-b[1],b[2]-b[0]) la<=>lb } puts "cc1" moji_x=hpx printf("ch %.11f %.11f 1 0 \"#{no}\n",moji_x,moji_y+hanare*zusun) printf("ci %.11f %.11f %.11f\n",moji_x,moji_y+(hanare+moji_h/2)*zusun,gyo/2*zusun) moji_x +=col_x*zusun renzoku.each_with_index{|item,ind| if s<0 ch_write_online(item,str_a[ind],hanare,zusun) else temp=[item[2],item[3],item[0],item[1]] ch_write_online(temp,str_a[ind],hanare,zusun) end l=hypot(item[3]-item[1],item[2]-item[0]) puts "cc1" printf("ch %.11f %.11f 1 0 \"%.3f\n",moji_x,moji_y+hanare*zusun,l) moji_x += col_x*zusun } printf(" %.11f %.11f %.11f %.11f\n",hpx-col_x/2*zusun,moji_y,hpx+col_x*3.5*zusun,moji_y) no+=1 moji_y -= gyo*zusun end end moji_y += gyo*zusun moji_x=hpx-col_x/2*zusun 5.times{ printf(" %.11f %.11f %.11f %.11f\n",moji_x,hpy+gyo*zusun,moji_x,moji_y) moji_x += col_x*zusun } |