Indexへ
(13958)//【13949】→(13959)
------------------------
【タイトル】重心位置について
【記事番号】 13949 (*)
【 日時 】06/07/24 10:34
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

線で囲まれた形の図面上で、対象にかつ中心に方形の空洞というか庭になっている図面であれば重心位置は簡単ですが、空洞部分が上下左右にずれていたりした場合はどうやって求めるのでしょうか?また、よい外部変形は何か公開されていますか?また、空洞部分が多角形ではどうでしょうか?わかる方教えてください。


Indexへ
(13949)←【13959】→(13960)
------------------------
【タイトル】Re(1):図心位置について
【記事番号】 13959 (13949)
【 日時 】06/07/24 17:16
【 発言者 】コジマ

▼田舎のかえるさん:
>線で囲まれた形の図面上で、対象にかつ中心に方形の空洞というか庭になっている図面であれば重心位置は簡単ですが、空洞部分が上下左右にずれていたりした場合はどうやって求めるのでしょうか?また、よい外部変形は何か公開されていますか?また、空洞部分が多角形ではどうでしょうか?わかる方教えてください。

重心はわかりませんが、
図心ならば、以下の方法でだせるかも?

外側の閉鎖図形の図心を出す。
内側(空洞)図形の図心を出す。

図心相互を結んだ直線の中心点が、総合の図心では?

空洞が2個の場合は、図心相互を結んで出来た三角形自身の図心が
総合の図心だと思いますが?

違うかな?


Indexへ
(13959)←【13960】→(13967)
------------------------
【タイトル】Re(2)
【記事番号】 13960 (13959)
【 日時 】06/07/24 17:33
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

図心のことです。ごめんなさい。やってみます。ありがとうございます。


Indexへ
(13960)←【13967】→(13985)
------------------------
【タイトル】Re(1):Re(2)失礼しました。
【記事番号】 13967 (13960)
【 日時 】06/07/24 20:16
【 発言者 】コジマ

▼田舎のかえるさん:

失礼しました。

単純平均で考えてしまいました。
相互の面積が違うので、図心間の中点が合成図心にはならないですね。
(加重平均でないと駄目ですね。この場合の重みは面積?)

ご存知と思いますが、凸形の物体(比重は均等)の重心計算では、
下部と上部を分けて、
(基準点からの中心距離1*重量1+基準点からの中心距離2*重量2)÷総重量
でだしますが、これがヒントになるかな?


Indexへ
(13967)←【13985】→(13961)
------------------------
【タイトル】Re(2):Re(2)失礼しました。
【記事番号】 13985 (13967)
【 日時 】06/07/25 09:18
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

アドバイスありがとうございます。


Indexへ
(13985)←【13961】→(13968)
------------------------
【タイトル】Re(2):図心位置について
【記事番号】 13961 (13959)
【 日時 】06/07/24 17:38
【 発言者 】タール
【 リンク 】http://www8.atwiki.jp/tarl/



▼コジマさん:
失礼します。

>外側の閉鎖図形の図心を出す。
>内側(空洞)図形の図心を出す。
>
>図心相互を結んだ直線の中心点が、総合の図心では?


これは違うんじゃないですかね。
点に近い極小の空洞図形が図形の隅にあるとすれば、
その点の有無によって突然図心が大幅に変わるので
おかしいと思います。

田舎のかえるさん:
島図形に対応した外部変形は知りませんが、
島図形に線1本を加えC型の図形と置き換え
れば、既存の外部変形アプリで対応できると思います。
探してみてください。


Indexへ
(13961)←【13968】→(13981)
------------------------
【タイトル】Re(3):図心位置について
【記事番号】 13968 (13961)
【 日時 】06/07/24 20:20
【 発言者 】コジマ

▼タールさん:
>▼コジマさん:
>失礼します。
>
>>外側の閉鎖図形の図心を出す。
>>内側(空洞)図形の図心を出す。
>>
>>図心相互を結んだ直線の中心点が、総合の図心では?
>
>
>これは違うんじゃないですかね。
>点に近い極小の空洞図形が図形の隅にあるとすれば、
>その点の有無によって突然図心が大幅に変わるので
>おかしいと思います。
>

単純平均で考えてしまいました。
相互の面積が違うので、図心間の中点が合成図心にはならないですね。

凸形の物体(比重は均等)の重心計算では、
下部と上部を分けて、
(基準点からの中心距離1*重量1+基準点からの中心距離2*重量2)÷総重量
でだすように記憶していますが、

考えかたとしては、これと同じでしょうか?


Indexへ
(13968)←【13981】→(13987)
------------------------
【タイトル】Re(4):図心位置について
【記事番号】 13981 (13968)
【 日時 】06/07/25 08:48
【 発言者 】タール
【 リンク 】http://www8.atwiki.jp/tarl/



▼コジマさん:
>凸形の物体(比重は均等)の重心計算では、
>下部と上部を分けて、
>(基準点からの中心距離1*重量1+基準点からの中心距離2*重量2)÷総重量


はい。これでいいと思います。
通りすがりその2さんの仰るとおりです。
重量を面積と考えると同じですよね。

以後よろしくお願いします。


Indexへ
(13981)←【13987】→(13990)
------------------------
【タイトル】Re(5):図心位置について
【記事番号】 13987 (13981)
【 日時 】06/07/25 09:20
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

ありがとうございます。


Indexへ
(13987)←【13990】→(13986)
------------------------
【タイトル】Re(4):図心位置について
【記事番号】 13990 (13968)
【 日時 】06/07/25 10:05
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

ありがとうございます。


Indexへ
(13990)←【13986】→(13991)
------------------------
【タイトル】Re(3):図心位置について
【記事番号】 13986 (13961)
【 日時 】06/07/25 09:19
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

どうもありがとうございます。


Indexへ
(13986)←【13991】→(13963)
------------------------
【タイトル】Re(3):図心位置について
【記事番号】 13991 (13961)
【 日時 】06/07/25 10:05
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

ありがとうございます。


Indexへ
(13991)←【13963】→(13992)
------------------------
【タイトル】Re(1):重心位置について
【記事番号】 13963 (13949)
【 日時 】06/07/24 18:10
【 発言者 】とおりすがり其の二

田舎のかえるさん、こんにちは。

▼田舎のかえるさん:
>線で囲まれた形の図面上で、対象にかつ中心に方形の空洞というか庭になっている図面であれば重心位置は簡単ですが、空洞部分が上下左右にずれていたりした場合はどうやって求めるのでしょうか?また、よい外部変形は何か公開されていますか?また、空洞部分が多角形ではどうでしょうか?わかる方教えてください。

閉図形の図心(荷重分布が均一の場合は重心と等しい)
を求める外部変形は幾つか公開されていますが、吹き抜
け等がある閉図形の図心を求める外部変形は私の知る限
りでは存在しないようです。
世の中は広いですから個人的に作成されている方は居ら
れると思いますが・?

とりあえず外部変形を使用せず図心を求めるには
断面一次モーメントの要領で計算出来ます。

Gx=Σ(Ai*Xi)/ΣAi
Gy=Σ(Ai*Yi)/ΣAi
Jw_cadより測定した座標値、面積をエクセル等に入力し
て簡易に求める事が出来ますので是非チャレンジしてみ
てください。

同様に剛心も断面一次モーメントから計算できます。


Indexへ
(13963)←【13992】→(13997)
------------------------
【タイトル】Re(2):重心位置について
【記事番号】 13992 (13963)
【 日時 】06/07/25 10:07
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

ありがとうございます。


Indexへ
(13992)←【13997】→(14053)
------------------------
【タイトル】Re(2):重心位置について
【記事番号】 13997 (13963)
【 日時 】06/07/25 13:06
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

>
>閉図形の図心(荷重分布が均一の場合は重心と等しい)
>を求める外部変形は幾つか公開されていますが、吹き抜
>け等がある閉図形の図心を求める外部変形は私の知る限
>りでは存在しないようです。
>世の中は広いですから個人的に作成されている方は居ら
>れると思いますが・?
>
>とりあえず外部変形を使用せず図心を求めるには
>断面一次モーメントの要領で計算出来ます。
>
>Gx=Σ(Ai*Xi)/ΣAi
>Gy=Σ(Ai*Yi)/ΣAi
>Jw_cadより測定した座標値、面積をエクセル等に入力し
>て簡易に求める事が出来ますので是非チャレンジしてみ
>てください。
>
>同様に剛心も断面一次モーメントから計算できます。

とおりすがりの其の二様
こんにちは、ずうずうしいんですが、時間が許せば、図と数式の例題作っていただけませんか?く


Indexへ
(13997)←【14053】→(14057)
------------------------
【タイトル】Re(3):試作品
【記事番号】 14053 (13997)
【 日時 】06/07/26 20:49
【 発言者 】コジマ

▼田舎のかえるさん:

試作品です。
三角形では、正しく動作します。
多角形は?(多分大丈夫?)・・・多角形を複数の三角形にして、
(その図心距離*三角形面積)の総和/多角形面積
を多角形の数だけ繰り返して算出しています。

自信は、50%くらい。
幾何に強い方のアドバイスを待っています。

mswin32 版 Ruby のインストールが必要。以下で入手してください。
http://www61.tok2.com/home2/gravelroad/tips/inst_msw.html


◎バッチファイル(ファイル名 図心.bat)
以下の文をコピペ後、全角スペースを半角スペースに一括置換してください。


@REM 範囲指定して図形の図心記入
@echo off
REM #jww
REM #cd
REM #h1
REM #hc範囲選択又は、閉鎖図形の線上を右クリックしてください
REM #hp
REM #e
copy jwc_temp.txt temp.txt > nul
echo 円弧を含んだ図形は対象外です。
ruby -Ks 図心.rb temp.txt > jwc_temp.txt


◎スクリプトファイル(ファイル名 図心.rb)
以下の文をコピペ後、全角スペースを半角スペースに一括置換してください。


include Math
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

    if ika3(y2_1)>ika3(y1_1) &&
        ika3(y2_2)        ika3(y2_1)        ika3(y2_2)>ika3(y1_1)

        y=y1_1-y2_1
        dx=y/delta
        kouten_x=x2_1+dx
        kouten_y=y1_1

        if kouten_x>x1_1 && kouten_x            x=kouten_x-x1_1
            y=kouten_y-y1_1
            xy=sqrt(x**2+y**2)
            kouten_xt=x1_1+xy*cos(sen1_arg)
            kouten_yt=y1_1+xy*sin(sen1_arg)

            return [kouten_xt,kouten_yt]
        else
            return nil
        end
    else
        return nil
    end
end
def ika3(x)
    ((x.to_f)*1000).to_i/1000.to_f
end

#範囲の内(0)外(1)を返す
def area(x,y,sen)
    zahyo=[]
    sen.each{|item|zahyo<
    if zahyo.size==1 or zahyo.size>1 && zahyo.size%2==1
        return 0
    else
        return 1
    end
end

#線の角度を返す(ラジアン)
def arg(zahyo)
    x=zahyo[2]-zahyo[0]
    y=zahyo[3]-zahyo[1]
    kakudo=atan2(y,x)
    return kakudo
end
#線の長さを返す(mm)
def nagasa(zahyo)
    zahyo.to_a
    x=zahyo[2]-zahyo[0]
    y=zahyo[3]-zahyo[1]
    l=sqrt(x**2+y**2)
    return l
end

#三角形の図芯座標を返す
def sankaku_ten(zahyo)
    x1=zahyo[0]
    y1=zahyo[1]
    x2=zahyo[2]
    y2=zahyo[3]
    x3=zahyo[4]
    y3=zahyo[5]
    arg1=arg([x1,y1,x2,y2])
    l1=nagasa([x1,y1,x2,y2])
    arg2=arg([x1,y1,x3,y3])
    l2=nagasa([x1,y1,x3,y3])
    tyuten_x1=x1+l1/2*cos(arg1)
    tyuten_y1=y1+l1/2*sin(arg1)
    tyuten_x2=x1+l2/2*cos(arg2)
    tyuten_y2=y1+l2/2*sin(arg2)
    return sen_sen_kouten([tyuten_x1,tyuten_y1,x3,y3],[tyuten_x2,tyuten_y2,x2,y2])
end

sen=[]
while ARGF.gets
    xy =split
    if xy[0] =~ /^[0-9]/ or xy[0] =~ /^-/
        xy.collect!{|item|item.to_f}
        sen<    end
end

total_a=[];no=0
while a=sen.shift
    renzoku=[];sankaku_a=[]
    begin
        renzoku<        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]]
            elsif renzoku[-1][2]==b[2] && renzoku[-1][3]==b[3]
                a=[b[2],b[3],b[0],b[1]]
            end
            sen.delete_if{|item2|item2==b}
        end
    end while(b)

    if renzoku[0][0]==renzoku[-1][2] && renzoku[0][1]==renzoku[-1][3]
        rensen=[];no += 1

        renzoku.each{|item|rensen<<[item[0],item[1]]}

        i=2
        while rensen.size>3
            n=0;sankaku=[]
            sen1=[rensen[0][0],rensen[0][1],rensen[i][0],rensen[i][1]]
            kakudo,l=arg(sen1),nagasa(sen1)
            x=rensen[0][0]+(l/2)*cos(kakudo)
            y=rensen[0][1]+(l/2)*sin(kakudo)

            renzoku.each{|item|
                if sen_sen_kouten(sen1,item) != nil
                        n+=1
                end
            }
            if n==0
                if area(x,y,renzoku)==1
                        n+=1
                end
            end
            if n==0
                zusin=sankaku_ten([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1],rensen[2][0],rensen[2][1]])

                l1=nagasa(
                    [rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1]])
                l2=nagasa(
                    [rensen[1][0],rensen[1][1],rensen[i][0],rensen[i][1]])
                l3=nagasa(
                    [rensen[i][0],rensen[i][1],rensen[0][0],rensen[0][1]])
                si=(l1+l2+l3)/2
                s=sqrt(si*(si-l1)*(si-l2)*(si-l3))

                sankaku_a << [s,zusin].flatten
                rensen.slice!(i-1)
            else
                a=rensen.shift
                rensen<
            end
        end

        zusin = sankaku_ten([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1],rensen[2][0],rensen[2][1]])

        l1=nagasa([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1]])
        l2=nagasa([rensen[1][0],rensen[1][1],rensen[i][0],rensen[i][1]])
        l3=nagasa([rensen[i][0],rensen[i][1],rensen[0][0],rensen[0][1]])
        si=(l1+l2+l3)/2
        s=sqrt(si*(si-l1)*(si-l2)*(si-l3))

        sankaku_a << [s,zusin].flatten

    end
    menseki=0;xl=0;yl=0
    sankaku_a.each{|item|
        menseki += item[0]
        xl += item[0]*item[1]
        yl += item[0]*item[2]
    }
    x=xl/menseki
    y=yl/menseki
    puts ["pt",x,y].join("\s")

    puts "cc1"
    printf("ch %.11f %.11f 1 0\"NO%s\n",x,y,no)

    total_a<<[menseki,x,y]
end
if no>1
    menseki=0;xl=0;yl=0
    total_a.each{|item|
        menseki += item[0]
        xl += item[0]*item[1]
        yl += item[0]*item[2]
    }
    x=xl/menseki
    y=yl/menseki
    puts ["pt",x,y].join("\s")
    printf("ch %.11f %.11f 1 0\"TOTAL\n",x,y)
elsif no==0
    printf("h#閉鎖図形はありません\n")
end


Indexへ
(14053)←【14057】→(14059)
------------------------
【タイトル】Re(4):試作品
【記事番号】 14057 (14053)
【 日時 】06/07/26 21:53
【 発言者 】通りすがり其の二

コジマさん、早速の試作品ご苦労様です。

動作確認しましたが一部の図形でエラーが出ました。

192,193,208,208行目を下記のように修正すると正常に
動作いたしました。
参考にして下さい。

xl += item[0]*item[1].to_f
yl += item[0]*item[2].to_f


Indexへ
(14057)←【14059】→(14061)
------------------------
【タイトル】Re(5):試作品
【記事番号】 14059 (14057)
【 日時 】06/07/26 23:46
【 発言者 】コジマ

▼通りすがり其の二さん:
>動作確認しましたが一部の図形でエラーが出ました。
>
>192,193,208,208行目を下記のように修正すると正常に
>動作いたしました。
>参考にして下さい。
>
>xl += item[0]*item[1].to_f
>yl += item[0]*item[2].to_f

検証ありがとうございます。
参考にさせていただきます。

この外変の難点は、実点(図心)の位置が正確なのか?
確認するのが困難なことです。
(今でも半信半疑?)


Indexへ
(14059)←【14061】→(14065)
------------------------
【タイトル】Re(6):試作品
【記事番号】 14061 (14059)
【 日時 】06/07/27 00:18
【 発言者 】通りすがり其の二

▼コジマさん:
>▼通りすがり其の二さん:
>>動作確認しましたが一部の図形でエラーが出ました。
>>
>>192,193,208,208行目を下記のように修正すると正常に
>>動作いたしました。
>>参考にして下さい。
>>
>>xl += item[0]*item[1].to_f
>>yl += item[0]*item[2].to_f
>
>検証ありがとうございます。
>参考にさせていただきます。
>
>この外変の難点は、実点(図心)の位置が正確なのか?

私が検証した限りでは概ね合っていると思いますが
精算した場合と比べてみますと若干誤差がでる場合
があるようです。

これは三角形の求積の誤差の累積だと思われますので
実務上問題ないと思います。

回避策として出力データの丸め方式及び桁数の指定
が出来ますと不整合が無くなると思いますが・・。

それと私は建築系ですが最終図形の図心の点は点種
を変えるかまたは最終図心の表示だけの方が解りや
すいかと思います。

あと図心計算根拠を表示(出来ればエクセル出力)
出来ればベストだと思いす。


Indexへ
(14061)←【14065】→(14069)
------------------------
【タイトル】Re(7):加算と減算
【記事番号】 14065 (14061)
【 日時 】06/07/27 09:13
【 発言者 】コジマ

▼通りすがり其の二さん:
>私が検証した限りでは概ね合っていると思いますが
>精算した場合と比べてみますと若干誤差がでる場合
>があるようです。
>
>これは三角形の求積の誤差の累積だと思われますので
>実務上問題ないと思います。

安心しました。

>回避策として出力データの丸め方式及び桁数の指定
>が出来ますと不整合が無くなると思いますが・・。
>

作図精度の関係で、面積はmu 長さはmm 単位で計算しています。
(多分、小数点14桁)
m単位だと、差がでますね。

肝心なことだったのですが、
田舎のかえるさんの質問は、「空洞のある図形」だったのですが、
「図形の上に図形が乗っている図形」を想定してしまいました。

「空洞のある図形」は減算して
(本体図形の面積*本体図形の図心距離-空洞の面積*空洞の図心距離)/(本体図形の面積-空洞の面積)
なのでしょうか?

以下は、上記の方法で算出するスクリプトです。

include Math
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

    if ika3(y2_1)>ika3(y1_1) &&
        ika3(y2_2)        ika3(y2_1)        ika3(y2_2)>ika3(y1_1)

        y=y1_1-y2_1
        dx=y/delta
        kouten_x=x2_1+dx
        kouten_y=y1_1

        if kouten_x>x1_1 && kouten_x            x=kouten_x-x1_1
            y=kouten_y-y1_1
            xy=sqrt(x**2+y**2)
            kouten_xt=x1_1+xy*cos(sen1_arg)
            kouten_yt=y1_1+xy*sin(sen1_arg)

            return [kouten_xt,kouten_yt]
        else
            return nil
        end
    else
        return nil
    end
end
def ika3(x)
    ((x.to_f)*1000).to_i/1000.to_f
end

#範囲の内(0)外(1)を返す
def area(x,y,sen)
    zahyo=[]
    sen.each{|item|zahyo<
    if zahyo.size==1 or zahyo.size>1 && zahyo.size%2==1
        return 0
    else
        return 1
    end
end

#線の角度を返す(ラジアン)
def arg(zahyo)
    x=zahyo[2]-zahyo[0]
    y=zahyo[3]-zahyo[1]
    kakudo=atan2(y,x)
    return kakudo
end
#線の長さを返す(mm)
def nagasa(zahyo)
    zahyo.to_a
    x=zahyo[2]-zahyo[0]
    y=zahyo[3]-zahyo[1]
    l=sqrt(x**2+y**2)
    return l
end

#三角形の図芯座標を返す
def sankaku_ten(zahyo)
    x1=zahyo[0]
    y1=zahyo[1]
    x2=zahyo[2]
    y2=zahyo[3]
    x3=zahyo[4]
    y3=zahyo[5]
    arg1=arg([x1,y1,x2,y2])
    l1=nagasa([x1,y1,x2,y2])
    arg2=arg([x1,y1,x3,y3])
    l2=nagasa([x1,y1,x3,y3])
    tyuten_x1=x1+l1/2*cos(arg1)
    tyuten_y1=y1+l1/2*sin(arg1)
    tyuten_x2=x1+l2/2*cos(arg2)
    tyuten_y2=y1+l2/2*sin(arg2)
    return sen_sen_kouten([tyuten_x1,tyuten_y1,x3,y3],[tyuten_x2,tyuten_y2,x2,y2])
end

sen=[]
while ARGF.gets
    xy =split
    if xy[0] =~ /^[0-9]/ or xy[0] =~ /^-/
        xy.collect!{|item|item.to_f}
        sen<    end
end

total_a=[];no=0
while a=sen.shift
    renzoku=[];sankaku_a=[]
    begin
        renzoku<        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]]
            elsif renzoku[-1][2]==b[2] && renzoku[-1][3]==b[3]
                a=[b[2],b[3],b[0],b[1]]
            end
            sen.delete_if{|item2|item2==b}
        end
    end while(b)

    if renzoku[0][0]==renzoku[-1][2] && renzoku[0][1]==renzoku[-1][3]
        rensen=[];no += 1
        renzoku.each{|item|rensen<<[item[0],item[1]]}

        i=2
        while rensen.size>3
            n=0;sankaku=[]
            sen1=[rensen[0][0],rensen[0][1],rensen[i][0],rensen[i][1]]
            kakudo,l=arg(sen1),nagasa(sen1)
            x=rensen[0][0]+(l/2)*cos(kakudo)
            y=rensen[0][1]+(l/2)*sin(kakudo)

            renzoku.each{|item|
                if sen_sen_kouten(sen1,item) != nil
                        n+=1
                end
            }
            if n==0
                if area(x,y,renzoku)==1
                        n+=1
                end
            end
            if n==0
                zusin=sankaku_ten([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1],rensen[2][0],rensen[2][1]])

                l1=nagasa(
                    [rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1]])
                l2=nagasa(
                    [rensen[1][0],rensen[1][1],rensen[i][0],rensen[i][1]])
                l3=nagasa(
                    [rensen[i][0],rensen[i][1],rensen[0][0],rensen[0][1]])
                si=(l1+l2+l3)/2
                s=sqrt(si*(si-l1)*(si-l2)*(si-l3))

                sankaku_a << [s,zusin].flatten
                rensen.slice!(i-1)
            else
                a=rensen.shift
                rensen<
            end
        end

        zusin = sankaku_ten([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1],rensen[2][0],rensen[2][1]])

        l1=nagasa([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1]])
        l2=nagasa([rensen[1][0],rensen[1][1],rensen[i][0],rensen[i][1]])
        l3=nagasa([rensen[i][0],rensen[i][1],rensen[0][0],rensen[0][1]])
        si=(l1+l2+l3)/2
        s=sqrt(si*(si-l1)*(si-l2)*(si-l3))

        sankaku_a << [s,zusin].flatten

    end
    menseki=0;xl=0;yl=0
    sankaku_a.each{|item|
        menseki += item[0]
        xl += item[0]*item[1].to_f
        yl += item[0]*item[2].to_f
    }
    x=xl/menseki
    y=yl/menseki
    puts ["pt",x,y].join("\s")

    puts "cc1"
    printf("ch %.11f %.11f 1 0\"NO%s\n",x,y,no)

    total_a<<[menseki,x,y]


end
if no>1
    total_a.sort!{|a,b|b[0]<=>a[0]}
    menseki=total_a[0][0]
    xl=total_a[0][0]*total_a[0][1].to_f
    yl=total_a[0][0]*total_a[0][2].to_f
    1.upto(total_a.size-1){|j|
            menseki -= total_a[j][0]
            xl -= total_a[j][0]*total_a[j][1].to_f
            yl -= total_a[j][0]*total_a[j][2].to_f
    }

    x=xl/menseki
    y=yl/menseki
    puts ["pt",x,y].join("\s")
    printf("ch %.11f %.11f 1 0\"TOTAL\n",x,y)
elsif no==0
    printf("h#閉鎖図形はありません\n")
end


Indexへ
(14065)←【14069】→(14075)
------------------------
【タイトル】Re(8):加算と減算
【記事番号】 14069 (14065)
【 日時 】06/07/27 11:23
【 発言者 】通りすがり其の二

コジマさん、ご苦労様です。

▼コジマさん:
>▼通りすがり其の二さん:
>>私が検証した限りでは概ね合っていると思いますが
>>精算した場合と比べてみますと若干誤差がでる場合
>>があるようです。
>>
>>これは三角形の求積の誤差の累積だと思われますので
>>実務上問題ないと思います。
>
>安心しました。
>
>>回避策として出力データの丸め方式及び桁数の指定
>>が出来ますと不整合が無くなると思いますが・・。
>>
>
>作図精度の関係で、面積はmu 長さはmm 単位で計算しています。
>(多分、小数点14桁)
>m単位だと、差がでますね。
>

図心計算根拠を作成する場合建築に於いては通常はm単位です。
座標値、面積は小数点4位切捨て3位で丸めが多いと思いますがこの点
は統一すれば問題ないと思います。
よって図心作図のみに於いてはコジマさんの方法で良いと思います。


>肝心なことだったのですが、
>田舎のかえるさんの質問は、「空洞のある図形」だったのですが、
>「図形の上に図形が乗っている図形」を想定してしまいました。
>
>「空洞のある図形」は減算して
>(本体図形の面積*本体図形の図心距離-空洞の面積*空洞の図心距離)/(本体図形の面積-空洞の面積)
>なのでしょうか?
>

空洞のある図形の面積はマイナスにして
Gx=Σ(Xi*Ai)/ΣAi
Gy=Σ(Yi*Ai)/ΣAi
の式で同じ結果になると思いますが。

私の方で検証した結果、座標点が一致しましたのでご報告いたします。

短期間の内に見事な外部変形の作成ご提供改めて感謝いたします。

----余談です---
建築の場合に於いて手動で計算する場合は基本的には矩形、三角、円(円弧)
に分割して計算しますが此れは荷重を考慮に入れた重心が結果的には必要だ
からです。


Indexへ
(14069)←【14075】→(14073)
------------------------
【タイトル】Re(8):加算と減算
【記事番号】 14075 (14065)
【 日時 】06/07/27 14:52
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

すごくありがとうございます。わたしの考えていたのは、上から見るとあながあるドーナツのように屋根がない状態です。構造物中の空間でなく、吹き抜けて屋根がない状態です。ほんとありがとうございます。やってみます。


Indexへ
(14075)←【14073】→(14080)
------------------------
【タイトル】Re(4):試作品
【記事番号】 14073 (14053)
【 日時 】06/07/27 14:40
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

今みました。ありがとうございます。感謝!


Indexへ
(14073)←【14080】→(14087)
------------------------
【タイトル】Re(4):すみません、操作がてこづっています。
【記事番号】 14080 (14053)
【 日時 】06/07/27 16:44
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

▼こんにちは、コジマさん:
>もうしわけありませんが、以下の操作がよくわからず混戦しております。
よかったら、教えてください。

>◎バッチファイル(ファイル名 図心.bat)
>以下の文をコピペ後、全角スペースを半角スペースに一括置換してください。
>
>
>@REM 範囲指定して図形の図心記入
>@echo off
>REM #jww
>REM #cd
>REM #h1
>REM #hc範囲選択又は、閉鎖図形の線上を右クリックしてください
>REM #hp
>REM #e
>copy jwc_temp.txt temp.txt > nul
>echo 円弧を含んだ図形は対象外です。
>ruby -Ks 図心.rb temp.txt > jwc_temp.txt
>
>
>◎スクリプトファイル(ファイル名 図心.rb)
>以下の文をコピペ後、全角スペースを半角スペースに一括置換してください。
>
>
>include Math
>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
>
>    if ika3(y2_1)>ika3(y1_1) &&
>        ika3(y2_2)>        ika3(y2_1)>        ika3(y2_2)>ika3(y1_1)
>
>        y=y1_1-y2_1
>        dx=y/delta
>        kouten_x=x2_1+dx
>        kouten_y=y1_1
>
>        if kouten_x>x1_1 && kouten_x>            x=kouten_x-x1_1
>            y=kouten_y-y1_1
>            xy=sqrt(x**2+y**2)
>            kouten_xt=x1_1+xy*cos(sen1_arg)
>            kouten_yt=y1_1+xy*sin(sen1_arg)
>
>            return [kouten_xt,kouten_yt]
>        else
>            return nil
>        end
>    else
>        return nil
>    end
>end
>def ika3(x)
>    ((x.to_f)*1000).to_i/1000.to_f
>end
>
>#範囲の内(0)外(1)を返す
>def area(x,y,sen)
>    zahyo=[]
>    sen.each{|item|zahyo<>
>    if zahyo.size==1 or zahyo.size>1 && zahyo.size%2==1
>        return 0
>    else
>        return 1
>    end
>end
>
>#線の角度を返す(ラジアン)
>def arg(zahyo)
>    x=zahyo[2]-zahyo[0]
>    y=zahyo[3]-zahyo[1]
>    kakudo=atan2(y,x)
>    return kakudo
>end
>#線の長さを返す(mm)
>def nagasa(zahyo)
>    zahyo.to_a
>    x=zahyo[2]-zahyo[0]
>    y=zahyo[3]-zahyo[1]
>    l=sqrt(x**2+y**2)
>    return l
>end
>
>#三角形の図芯座標を返す
>def sankaku_ten(zahyo)
>    x1=zahyo[0]
>    y1=zahyo[1]
>    x2=zahyo[2]
>    y2=zahyo[3]
>    x3=zahyo[4]
>    y3=zahyo[5]
>    arg1=arg([x1,y1,x2,y2])
>    l1=nagasa([x1,y1,x2,y2])
>    arg2=arg([x1,y1,x3,y3])
>    l2=nagasa([x1,y1,x3,y3])
>    tyuten_x1=x1+l1/2*cos(arg1)
>    tyuten_y1=y1+l1/2*sin(arg1)
>    tyuten_x2=x1+l2/2*cos(arg2)
>    tyuten_y2=y1+l2/2*sin(arg2)
>    return sen_sen_kouten([tyuten_x1,tyuten_y1,x3,y3],[tyuten_x2,tyuten_y2,x2,y2])
>end
>
>sen=[]
>while ARGF.gets
>    xy =split
>    if xy[0] =~ /^[0-9]/ or xy[0] =~ /^-/
>        xy.collect!{|item|item.to_f}
>        sen<>    end
>end
>
>total_a=[];no=0
>while a=sen.shift
>    renzoku=[];sankaku_a=[]
>    begin
>        renzoku<>        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]]
>            elsif renzoku[-1][2]==b[2] && renzoku[-1][3]==b[3]
>                a=[b[2],b[3],b[0],b[1]]
>            end
>            sen.delete_if{|item2|item2==b}
>        end
>    end while(b)
>
>    if renzoku[0][0]==renzoku[-1][2] && renzoku[0][1]==renzoku[-1][3]
>        rensen=[];no += 1
>
>        renzoku.each{|item|rensen<<[item[0],item[1]]}
>
>        i=2
>        while rensen.size>3
>            n=0;sankaku=[]
>            sen1=[rensen[0][0],rensen[0][1],rensen[i][0],rensen[i][1]]
>            kakudo,l=arg(sen1),nagasa(sen1)
>            x=rensen[0][0]+(l/2)*cos(kakudo)
>            y=rensen[0][1]+(l/2)*sin(kakudo)
>
>            renzoku.each{|item|
>                if sen_sen_kouten(sen1,item) != nil
>                        n+=1
>                end
>            }
>            if n==0
>                if area(x,y,renzoku)==1
>                        n+=1
>                end
>            end
>            if n==0
>                zusin=sankaku_ten([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1],rensen[2][0],rensen[2][1]])
>
>                l1=nagasa(
>                    [rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1]])
>                l2=nagasa(
>                    [rensen[1][0],rensen[1][1],rensen[i][0],rensen[i][1]])
>                l3=nagasa(
>                    [rensen[i][0],rensen[i][1],rensen[0][0],rensen[0][1]])
>                si=(l1+l2+l3)/2
>                s=sqrt(si*(si-l1)*(si-l2)*(si-l3))
>
>                sankaku_a << [s,zusin].flatten
>                rensen.slice!(i-1)
>            else
>                a=rensen.shift
>                rensen<
>            end
>        end
>
>        zusin = sankaku_ten([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1],rensen[2][0],rensen[2][1]])
>
>        l1=nagasa([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1]])
>        l2=nagasa([rensen[1][0],rensen[1][1],rensen[i][0],rensen[i][1]])
>        l3=nagasa([rensen[i][0],rensen[i][1],rensen[0][0],rensen[0][1]])
>        si=(l1+l2+l3)/2
>        s=sqrt(si*(si-l1)*(si-l2)*(si-l3))
>
>        sankaku_a << [s,zusin].flatten
>
>    end
>    menseki=0;xl=0;yl=0
>    sankaku_a.each{|item|
>        menseki += item[0]
>        xl += item[0]*item[1]
>        yl += item[0]*item[2]
>    }
>    x=xl/menseki
>    y=yl/menseki
>    puts ["pt",x,y].join("\s")
>
>    puts "cc1"
>    printf("ch %.11f %.11f 1 0\"NO%s\n",x,y,no)
>
>    total_a<<[menseki,x,y]
>end
>if no>1
>    menseki=0;xl=0;yl=0
>    total_a.each{|item|
>        menseki += item[0]
>        xl += item[0]*item[1]
>        yl += item[0]*item[2]
>    }
>    x=xl/menseki
>    y=yl/menseki
>    puts ["pt",x,y].join("\s")
>    printf("ch %.11f %.11f 1 0\"TOTAL\n",x,y)
>elsif no==0
>    printf("h#閉鎖図形はありません\n")
>end


Indexへ
(14080)←【14087】→(14094)
------------------------
【タイトル】Re(5):すみません、操作がてこづっています。
【記事番号】 14087 (14080)
【 日時 】06/07/27 18:59
【 発言者 】コジマ

▼田舎のかえるさん:
>もうしわけありませんが、以下の操作がよくわからず混戦しております。
>よかったら、教えてください。
>


バッチファイルとスクリプトファイルの作成(コピペ)方法が分からないのでしょうか?

メモ帳(notepad)を起動して開く。
以下の文をコピーする。

----------↓下の行から、この行は含まない

@REM 範囲指定して図形の図心記入
@echo off
REM #jww
REM #cd
REM #h1
REM #hc範囲選択又は、閉鎖図形の線上を右クリックしてください
REM #hp
REM #e
copy jwc_temp.txt temp.txt > nul
echo 円弧を含んだ図形は対象外です。
ruby -Ks 図心.rb temp.txt > jwc_temp.txt

------↑上の行まで


メモ帳(notepad)に移って、貼り付けた後、全角スペースを半角スペースに一括置換し、名前を「図心.bat」として保存する。
メモ帳(notepad)の新規作成をクリック。


この掲示板に移って
以下の文をコピーする。

----------↓下の行から、この行は含まない

include Math
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

    if ika3(y2_1)>ika3(y1_1) &&
        ika3(y2_2)        ika3(y2_1)        ika3(y2_2)>ika3(y1_1)

        y=y1_1-y2_1
        dx=y/delta
        kouten_x=x2_1+dx
        kouten_y=y1_1

        if kouten_x>x1_1 && kouten_x            x=kouten_x-x1_1
            y=kouten_y-y1_1
            xy=sqrt(x**2+y**2)
            kouten_xt=x1_1+xy*cos(sen1_arg)
            kouten_yt=y1_1+xy*sin(sen1_arg)

            return [kouten_xt,kouten_yt]
        else
            return nil
        end
    else
        return nil
    end
end
def ika3(x)
    ((x.to_f)*1000).to_i/1000.to_f
end

#範囲の内(0)外(1)を返す
def area(x,y,sen)
    zahyo=[]
    sen.each{|item|zahyo<
    if zahyo.size==1 or zahyo.size>1 && zahyo.size%2==1
        return 0
    else
        return 1
    end
end

#線の角度を返す(ラジアン)
def arg(zahyo)
    x=zahyo[2]-zahyo[0]
    y=zahyo[3]-zahyo[1]
    kakudo=atan2(y,x)
    return kakudo
end
#線の長さを返す(mm)
def nagasa(zahyo)
    zahyo.to_a
    x=zahyo[2]-zahyo[0]
    y=zahyo[3]-zahyo[1]
    l=sqrt(x**2+y**2)
    return l
end

#三角形の図芯座標を返す
def sankaku_ten(zahyo)
    x1=zahyo[0]
    y1=zahyo[1]
    x2=zahyo[2]
    y2=zahyo[3]
    x3=zahyo[4]
    y3=zahyo[5]
    arg1=arg([x1,y1,x2,y2])
    l1=nagasa([x1,y1,x2,y2])
    arg2=arg([x1,y1,x3,y3])
    l2=nagasa([x1,y1,x3,y3])
    tyuten_x1=x1+l1/2*cos(arg1)
    tyuten_y1=y1+l1/2*sin(arg1)
    tyuten_x2=x1+l2/2*cos(arg2)
    tyuten_y2=y1+l2/2*sin(arg2)
    return sen_sen_kouten([tyuten_x1,tyuten_y1,x3,y3],[tyuten_x2,tyuten_y2,x2,y2])
end

sen=[]
while ARGF.gets
    xy =split
    if xy[0] =~ /^[0-9]/ or xy[0] =~ /^-/
        xy.collect!{|item|item.to_f}
        sen<    end
end

total_a=[];no=0
while a=sen.shift
    renzoku=[];sankaku_a=[]
    begin
        renzoku<        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]]
            elsif renzoku[-1][2]==b[2] && renzoku[-1][3]==b[3]
                a=[b[2],b[3],b[0],b[1]]
            end
            sen.delete_if{|item2|item2==b}
        end
    end while(b)

    if renzoku[0][0]==renzoku[-1][2] && renzoku[0][1]==renzoku[-1][3]
        rensen=[];no += 1

        renzoku.each{|item|rensen<<[item[0],item[1]]}

        i=2
        while rensen.size>3
            n=0;sankaku=[]
            sen1=[rensen[0][0],rensen[0][1],rensen[i][0],rensen[i][1]]
            kakudo,l=arg(sen1),nagasa(sen1)
            x=rensen[0][0]+(l/2)*cos(kakudo)
            y=rensen[0][1]+(l/2)*sin(kakudo)

            renzoku.each{|item|
                if sen_sen_kouten(sen1,item) != nil
                        n+=1
                end
            }
            if n==0
                if area(x,y,renzoku)==1
                        n+=1
                end
            end
            if n==0
                zusin=sankaku_ten([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1],rensen[2][0],rensen[2][1]])

                l1=nagasa(
                    [rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1]])
                l2=nagasa(
                    [rensen[1][0],rensen[1][1],rensen[i][0],rensen[i][1]])
                l3=nagasa(
                    [rensen[i][0],rensen[i][1],rensen[0][0],rensen[0][1]])
                si=(l1+l2+l3)/2
                s=sqrt(si*(si-l1)*(si-l2)*(si-l3))

                sankaku_a << [s,zusin].flatten
                rensen.slice!(i-1)
            else
                a=rensen.shift
                rensen<
            end
        end

        zusin = sankaku_ten([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1],rensen[2][0],rensen[2][1]])

        l1=nagasa([rensen[0][0],rensen[0][1],rensen[1][0],rensen[1][1]])
        l2=nagasa([rensen[1][0],rensen[1][1],rensen[i][0],rensen[i][1]])
        l3=nagasa([rensen[i][0],rensen[i][1],rensen[0][0],rensen[0][1]])
        si=(l1+l2+l3)/2
        s=sqrt(si*(si-l1)*(si-l2)*(si-l3))

        sankaku_a << [s,zusin].flatten

    end
    menseki=0;xl=0;yl=0
    sankaku_a.each{|item|
        menseki += item[0]
        xl += item[0]*item[1]
        yl += item[0]*item[2]
    }
    x=xl/menseki
    y=yl/menseki
    puts ["pt",x,y].join("\s")

    puts "cc1"
    printf("ch %.11f %.11f 1 0\"NO%s\n",x,y,no)

    total_a<<[menseki,x,y]
end
if no>1
    menseki=0;xl=0;yl=0
    total_a.each{|item|
        menseki += item[0]
        xl += item[0]*item[1]
        yl += item[0]*item[2]
    }
    x=xl/menseki
    y=yl/menseki
    puts ["pt",x,y].join("\s")
    printf("ch %.11f %.11f 1 0\"TOTAL\n",x,y)
elsif no==0
    printf("h#閉鎖図形はありません\n")
end


------↑上の行まで

メモ帳(notepad)に移って、貼り付けた後、全角スペースを半角スペースに一括置換し、名前を「図心.rb」として保存する。


操作は、他の外変と同じ。
但し、mswin32 版 Ruby のインストールが必要。
以下で入手してください。インストール方法も参照してください。
http://www61.tok2.com/home2/gravelroad/tips/inst_msw.html


Indexへ
(14087)←【14094】→(14100)
------------------------
【タイトル】Re(6):お願いします
【記事番号】 14094 (14087)
【 日時 】06/07/28 09:23
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

▼コジマ様:
なんかとてもありがとうございます。個人的な質問なので恐縮ですが、解らないままにするのは悔しいので、この際、教えてください。
「全角スペースを半角スペースに一括置換し」とはどのように操作するのですか?
また、できたメモ帳はどこに保管したらよいのですか?
また、mswin32は解凍したものファイルそのものをwindowsSYSTEM32に保管すればよいのですか?それともファイルの中の項目を一つ一つ出して保管したらよいのでしょうか?
よかったら教えてください。


Indexへ
(14094)←【14100】→(14114)
------------------------
【タイトル】Re(7):お願いします
【記事番号】 14100 (14094)
【 日時 】06/07/28 10:25
【 発言者 】コジマ

▼田舎のかえるさん:
>▼コジマ様:
>なんかとてもありがとうございます。個人的な質問なので恐縮ですが、解らないままにするのは悔しいので、この際、教えてください。
>「全角スペースを半角スペースに一括置換し」とはどのように操作するのですか?

メモ帳の「編集」→「置換」→ダイアログが表示される。
「検索する文字列」に全角スペースを入力
「置換後の文字列」に半角スペースを入力
「全て置換」をクリック


但し、win98の場合、メモ帳には置換機能がないので、wordpad を使用する。

>また、できたメモ帳はどこに保管したらよいのですか?

どのフォルダに保存してもかまいません。
(但し、バッチファイルとスクリプトファイルは同じフォルダに保存する)


>また、mswin32は解凍したものファイルそのものをwindowsSYSTEM32に保管すればよいのですか?それともファイルの中の項目を一つ一つ出して保管したらよいのでしょうか?

エクスプローラーで、解凍したサブフォルダにアクセスする。
サブフォルダの中のフォルダとファイルが表示されたら
「編集」→「すべて選択」→「編集」→コピー

SYSTEM32 に移動する→「編集」→貼り付け


Indexへ
(14100)←【14114】→(14124)
------------------------
【タイトル】Re(8):その後ですが
【記事番号】 14114 (14100)
【 日時 】06/07/28 14:21
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

▼コジマさま:
いま、返信にしたがい作業をしました。この後、JWWを開き図形を画き外部変形をしても何も変化がないのですが、どうやって進めたらよいですか?よかったら、教えてください。(ほんとごめんなさい、付き合ってもらって)


Indexへ
(14114)←【14124】→(14125)
------------------------
【タイトル】Re(9):その後ですが
【記事番号】 14124 (14114)
【 日時 】06/07/28 18:50
【 発言者 】コジマ

▼田舎のかえるさん:
>▼コジマさま:
>いま、返信にしたがい作業をしました。この後、JWWを開き図形を画き外部変形をしても何も変化がないのですが、どうやって進めたらよいですか?よかったら、教えてください。(ほんとごめんなさい、付き合ってもらって)

メモ帳で、図心.bat を開いて、一番下の行に
pause と追記してから実行してみてください。
エラーメッセージが表示されます。
それからでないと、原因はわかりません。


@REM 範囲指定して図形の図心記入
@echo off
REM #jww
REM #cd
REM #h1
REM #hc範囲選択又は、閉鎖図形の線上を右クリックしてください
REM #c小数点以下有効桁数 無指定:3/_/a
REM #k算出根拠をEXCEL出力|1)有(L)|2)無(R)|/_/b
REM #hp
REM #e
copy jwc_temp.txt temp.txt > nul
echo 円弧を含んだ図形は対象外です。
ruby -Ks 図心計算.rb temp.txt %1 %2
pause


追記する


Indexへ
(14124)←【14125】→(14126)
------------------------
【タイトル】Re(10):その後ですが
【記事番号】 14125 (14124)
【 日時 】06/07/28 18:55
【 発言者 】コジマ

▼コジマさん:

違うバッチファイルでした。


@REM 範囲指定して図形の図心記入
@echo off
REM #jww
REM #cd
REM #h1
REM #hc範囲選択又は、閉鎖図形の線上を右クリックしてください
REM #hp
REM #e
copy jwc_temp.txt temp.txt > nul
echo 円弧を含んだ図形は対象外です。
ruby -Ks 図心.rb temp.txt > jwc_temp.txt
pause


追記する


Indexへ
(14125)←【14126】→(14131)
------------------------
【タイトル】Re(11):その後
【記事番号】 14126 (14125)
【 日時 】06/07/28 19:20
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

▼コジマさま:
円弧を含んだ図形は対象外です
ruby:No Such file or directory--図心計算.rb(Load Error)
続行するには何かキーを押してください

の、メッセージが出ました。
四角と四角に四角の空間のある図形で試しました。
(ほんとごめんなさい)


Indexへ
(14126)←【14131】→(14135)
------------------------
【タイトル】Re(12):その後
【記事番号】 14131 (14126)
【 日時 】06/07/28 23:15
【 発言者 】コジマ

▼田舎のかえるさん:
>円弧を含んだ図形は対象外です
>ruby:No Such file or directory--図心計算.rb(Load Error)
>続行するには何かキーを押してください

以下のバッチファイルで実行していますね。
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=14124;id=004

以下のバッチファイルで実行してください。
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=14125;id=004


Indexへ
(14131)←【14135】→(14141)
------------------------
【タイトル】Re(13):その後・・・
【記事番号】 14135 (14131)
【 日時 】06/07/29 00:00
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

▼コジマさま:

こんばんわ。やっぱり、同じメッセージがでます。rubyの保存さきが違うのでしょうか?個人のことでこのページに何度も返信してもらうの申し訳ありません。もし、お返事していただけるのでしたら個人のメールアドレスに返信していただけたらと思います。本当にお手数掛けます。ごめんなさい。


Indexへ
(14135)←【14141】→(14143)
------------------------
【タイトル】Re(14):その後・・・
【記事番号】 14141 (14135)
【 日時 】06/07/29 08:42
【 発言者 】コジマ

▼田舎のかえるさん:
>こんばんわ。やっぱり、同じメッセージがでます。rubyの保存さきが違うのでしょうか?個人のことでこのページに何度も返信してもらうの申し訳ありません。もし、お返事していただけるのでしたら個人のメールアドレスに返信していただけたらと思います。本当にお手数掛けます。ごめんなさい。

メッセージは、「スクリプトファイルが見付からない」という意味です。
スクリプトファイル名を確認してください。


Indexへ
(14141)←【14143】→(14150)
------------------------
【タイトル】Re(15):その後・・・
【記事番号】 14143 (14141)
【 日時 】06/07/29 11:26
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

▼コジマさま:
円弧を含んだ図形は対象外です
図心.rb:undefined variable or method`xy`for main:Object(NameError)
続行するには何かキーを押してください
が今度はでました。もうしわけありません・・・・。


Indexへ
(14143)←【14150】→(14217)
------------------------
【タイトル】Re(16):コピペのミスでしょう
【記事番号】 14150 (14143)
【 日時 】06/07/29 16:55
【 発言者 】コジマ

▼田舎のかえるさん:
>円弧を含んだ図形は対象外です
>図心.rb:undefined variable or method`xy`for main:Object(NameError)
>続行するには何かキーを押してください
>が今度はでました。もうしわけありません・・・・。

全角スペースが残っているか、コピペのミスでしょう。

こちらでもコピペしてみましたが、正常に動作します。


Indexへ
(14150)←【14217】→(14190)
------------------------
【タイトル】Re(17):コピペのミス
【記事番号】 14217 (14150)
【 日時 】06/08/01 17:05
【 発言者 】田舎のかえる noiro-pc@apost.plala.or.jp

▼コジマ様
何とか動きました。ほんとに、どうもありがとうございました。これからもわからないことありましたら教えてください。よろしくお願いします。


Indexへ
(14217)←【14190】→(14197)
------------------------
【タイトル】xBLGetG図心計算UPしました。
【記事番号】 14190 (13949)
【 日時 】06/07/31 16:03
【 発言者 】MASA
【 リンク 】http://www.geocities.jp/me109e4jp/index.html



田舎のかえるさん、みなさんこんにちは。

JW_CAD for Windowsから外変xBLOCKを利用して、XY座標を取り込んで、xy平面の
空洞のある多角形の面積及び図心座標を計算するxBLOCK発展系エクセルブックです。
各々の面積及び図心座標も計算します。
JWWにもどって図心の位置に点も打てます。

xBLGetG図心計算のなかで行っている計算の基本的な考え方を述べます。

1)まず図形の左下の端点を0,0とした相対座標にする。(この端点座標は後で使用する)
2)図形を三角形に区分し、(0,0)以外の2点の座標を用い行列式で面積計算する。
3)これに三角形の3点(この場合は1点が(0,0)ゆえに2点)のx座標・y座
標の総和を
  それぞれ3で割れば図心が出る、その相対図心座標に先ほどの端点の座標を
  加えれば図心座標を得る。
4)それぞれの面積に図心座標y・xをかけて足すと2つの断面一次モーメントが計
算できる
5)それぞれの断面一次モーメントを総面積で割ると総図心の座標が求まる。

というようなものです。

拙宅HowBankにてDLできます。

   


Indexへ
(14190)←【14197】//(13950)
------------------------
【タイトル】xBLGetG図心計算スクリプト修正
【記事番号】 14197 (14190)
【 日時 】06/07/31 18:45
【 発言者 】MASA
【 リンク 】http://www.geocities.jp/me109e4jp/index.html



田舎のかえるさん、みなさんこんにちは。

18:30より前にDLされた方はスクリプト修正をお願いいたします。

blockxyonly_cb.rb

---修正前---
BEGIN{
  $data = "mm"    #数学座標単位初期設定(mm)
---修正後---
BEGIN{
  $data = "m"    #数学座標単位初期設定(m)

以上

わたしがなおしたところが修正しきれていませんでした。

XBLの作者の金桜さんからご指摘をいただきました。
ありがとうございます。

なお、修正版をUPしております。

http://www.geocities.jp/me109e4jp/index.html