検索結果
e-x10
- 全てのカテゴリ
- 全ての質問
- 二分法のC++プログラム
#include<iostream> #include<cmath> using namespace std; int main(){ double x1, x2, c, a; double x1, x2, c; cout <<"x1:"; cin >> x1; cout <<"x2:"; cin >> x2; while(x2-x1 > 0.00001){ c=(x1+x2)/2; c=(x1+x2)/2; if(cos(x1/2)*cos(c/2)>=0) x1 = c; else x2 = c; } cout << "x=" << x1 <<endl; return 0; } x1 cos(x/2)って入れると x2 -9.25596e+061 って出て cos(pi/2)って入れても同じ風に出てしまうんですがこれも同じように出るんですが故障ですか? x1に3と入れると x2が出てきて、x2は4と入れると xが3.14159と出て、3回xが出ますが、上の2つ(cos(pi/2)とcos(x/2))はx1とx2しか出ません .
- ベストアンサー
- C・C++・C#
- noname#127615
- 回答数4
- 大至急お願いします。
2) |t'+Z' X'-iY'| |x'+iy' t'-z'| の行列が |(t+z)e^(-2a) (x-iy)e^(2ib)| |(x+iy)e^(-2ib) (t-z)e^(2a)| と等しいとき、t’、x’、y’、z’はどうなりますか?この時、虚数単位iは含まない形でお願いします。’は微分を表しているわけでなく、単純に区別するためにつけられたものです。 3)F(x)=∫(0→x)e^(-t^2)dtとし、 lim(x→∞)F(x)=∫(0→∞)e^(-t^2)dt=√π/2である。 a.dF(x)/dxを求めよ。 →=e^(-x^2)でいいでしょうか? b.∫(x→∞)e^(-t^2)をF(t)を用いて表せ。 →=lim(x→∞)F(x)-F(x)でいいでしょうか? c.∫(0→∞)e^(-a^2 t^2)dt →=(1/a)√π/2でいいでしょうか? d.∫(0→∞)t^2 e^(-t^2)dt →さっぱりわかりません。どうやって解いたらいいでしょうか? 4)下図は連成振動の問題です。すべて、ばね定数k、質量mです。下図では、x1>x2となっております(あくまでも、図からよみとったわけで、問題文には一切記載されていません)がこの場合、運動方程式は md^2x1/dt^2=-kx1-k(x1-x2) md^2x2/dt^2=-kx2+k(x1-x2) でいいでしょうか? わたしのよく見る問題では、x2>x1で 方程式も md^2x1/dt^2=-kx1+k(x2-x1) md^2x2/dt^2=-kx2-k(x2-x1) となっております。 僕の解釈は、変位が小さいほうは変位が大きいほうに引っ張られ、逆に変位が大きいほうはばねからの力を受けるため、上式の二項での符号の違いが生じるとしています。 また、知人に質問したら、小問で『x1(0)=a,x2(0)=-a,v1(0)=0,v2(0)=0の初期条件を与えた時のt>0での質点の位置を求めよ』とあるから、気にしなくていいよと言われましたが、よくわかりませんでした。 5)重心の位置ベクトルの定義式をかけと言われたら、式をただ説明なしに置くだけでいいのでしょうか?問題文には質量m1、m2の質点がそれぞれ位置ベクトルr1とr2の点にある。このような二体系をあつかうには、重心の位置ベクトルや相対ベクトルr=r2-r1を導入するのが便利であるとあります。 説明を入れて、式の証明等もしなければいけませんか? 問題が多いですが、みなさんのお力をお貸しください。 よろしくお願いします。
- 締切済み
- 物理学
- noname#177406
- 回答数1
- アセンブリ言語の宿題がわかりません。
爆弾を解除するプログラムです。exeファイルしか与えられていません。 phase1から5まであり、それぞれにインプットを求められ、正しいインプット(解除コード)を入力すると解除できます。 間違ったコードを入力すると爆発してしまいます。1,2は解けましたが、3で躓きました。objdumpしてみて、あるstring(恐らくglobal定数)と同じインプットをすれば解除できると踏んだのですが、どうしてもその特定のstringがわかりません。 以下にobjdumpした内の一部を載せておきました。都合上最小限のコードだけ載せざるを得ませんでしたので、 下記URLに、exeファイル、逆アセンブルファイル、phase1,2のanswerをアップロードしております。お時間があれば是非ご協力をお願いします。 環境 OS:ubuntu 9.04 デバッガ:Gnu DeBugger 08048424 <_IO_getc@plt>: 8048424: ff 25 10 a0 04 08 jmp *0x804a010 804842a: 68 20 00 00 00 push $0x20 804842f: e9 a0 ff ff ff jmp 80483d4 <_init+0x18> 08048723 <phase_3_of_5>: 8048723: 55 push %ebp 8048724: 89 e5 mov %esp,%ebp 8048726: 57 push %edi 8048727: 56 push %esi 8048728: 53 push %ebx 8048729: 83 ec 1c sub $0x1c,%esp 804872c: a1 30 a0 04 08 mov 0x804a030,%eax 8048731: 89 04 24 mov %eax,(%esp) 8048734: e8 eb fc ff ff call 8048424 <_IO_getc@plt> 8048739: bb 00 00 00 00 mov $0x0,%ebx 804873e: 8d 75 e6 lea -0x1a(%ebp),%esi 8048741: eb 04 jmp 8048747 <phase_3_of_5+0x24> 8048743: 88 44 33 ff mov %al,-0x1(%ebx,%esi,1) 8048747: a1 30 a0 04 08 mov 0x804a030,%eax 804874c: 89 04 24 mov %eax,(%esp) 804874f: e8 d0 fc ff ff call 8048424 <_IO_getc@plt> 8048754: 83 f8 0a cmp $0xa,%eax 8048757: 74 06 je 804875f <phase_3_of_5+0x3c> 8048759: 43 inc %ebx 804875a: 83 fb 0f cmp $0xf,%ebx 804875d: 75 e4 jne 8048743 <phase_3_of_5+0x20> 804875f: c6 45 f3 00 movb $0x0,-0xd(%ebp) 8048763: 8d 75 e6 lea -0x1a(%ebp),%esi 8048766: bf e4 8b 04 08 mov $0x8048be4,%edi 804876b: b9 0d 00 00 00 mov $0xd,%ecx 8048770: fc cld 8048771: f3 a6 repz cmpsb %es:(%edi),%ds:(%esi) 8048773: 0f 97 c2 seta %dl 8048776: 0f 92 c0 setb %al 8048779: 38 c2 cmp %al,%dl 804877b: 74 0c je 8048789 <phase_3_of_5+0x66> 804877d: c7 04 24 03 00 00 00 movl $0x3,(%esp) 8048784: e8 31 fe ff ff call 80485ba <explode> 8048789: 83 c4 1c add $0x1c,%esp 804878c: 5b pop %ebx 804878d: 5e pop %esi 804878e: 5f pop %edi 804878f: 5d pop %ebp 8048790: c3 ret
- ベストアンサー
- その他(プログラミング・開発)
- voltaire1
- 回答数2
- HP-UXにてiconv変換できません。
いつもお世話になっています。 当方、C言語初心者です。 環境 HP-UX 11.23 言語 C言語 他システムより接続された漢字コードに制御コードを付与し、JISコードに変更後、 JIS→SJISに変換するツールを開発しています。 たとえば 他システムより 0x3E3E 0x3B33(コードを調べると〔松山〕でした) 前後に制御コード付与すると 0x1B 0x24 0x42 0x3E3E 0x3B33 0x1B 0x28 0x4A JISで松山になります。 エディタで上記コードを読み込むと松山と表示されました。 ところが上記のJISを下記内容で実行させると、 入力値のコードがなんの変換もされず返却されました。 どこに不具合があって入力の内容(cvbuf)が出力の内容(ebuf)にそのまま返却されているのか調べることができませんでした。 何か見落としがあればご指摘のほど、宜しくお願い致します。 ※rlenをprintfしたところ正常返却されています。 ======================================================================= 呼び元は cvkanj(0x3E3E 0x3B33の内容が入ったアドレス,2) みないな感じです。 char *cvkanj(s, len) char *s; int *len; { char cvbuf[32768]; int rcd; staric char ebuf[32768] = {0}; static char ki[4] = { 0x1b, 0x24, 0x42, 0x00}; static char ko[4] = { 0x1b, 0x28, 0x4a, 0x00}; memcpy( cvbuf, ki, 3); memcpy( &cvbuf[3], s, len) memcpy( &cvbuf[len+3], ko, 3); cvbuf[len+6] = 0x00; rcd = convt(cvbuf, ebuf); return(&ebuf[0]); } int convt(pin, pout) char *pin; char *pout { iconv_t cd; size_t ilen; size_t olen; size_t rlen; ilen=strlen(pin); olen=32768; if ((cd = iconv_open("jis","sjis")) == (iconv_t)-1){ exit(-1); } rlen = iconv(cd, &pin, &ilen, &pout, &olen); iconv_close; return(0); }
- エクセルでどうしてもVALUEになります。
宜しくお願いします。 ちょっと長いですが N18 に =IF(AND(OR(D18="",D18=0),E18="",H18="",J18=""),"",D18+E18-F18-H18-J18-K18-M18) X18 に =IF(AND(OR(N18="",N18=0),O18="",R18="",T18=""),"",N18+O18-P18-R18-T18-U18-W18) Y18 に 数値 25,000を入れると AH18 の =IF(AND(OR(X18="",X18=0),Y18="",AB18="",AD18=""),"",X18+Y18-Z18-AB18-AD18-AE18-AG18) がVALUEになります。 どうしたら、数式の意味を変えずにエラー回避できるのでしょうか?
- ベストアンサー
- Windows XP
- hero-yasu
- 回答数2
- 平均値の定理を使った応用問題ですが
任意の正の数x,yに対して|e^(-x)-e^(-y)|≦k|x-y|・・・・(*)が成り立つような定数kの最小値を求めよ。 という問題でまず、 (i), x=yのとき、左辺=右辺=0となり、どのようなkに対しても(*)は成り立つ。 (ii), x≠yのとき、平均値の定理から、|e^(-x)-e^(-y)|=e^(-c)|x-y| (x<c<yまたはx>c>y)・・・・(1) を満たすcが存在するがx,yが正ならばc>0となり、e^(-c)<1,ゆえに、k≧1のときは、任意のx,yに対して(*)が成り立つ。 また、0<k<1とすると、k<e^(-x)<1,逆数の対数をとってlog(1/k)>x>0,よってlog(1/k)>x1>y1>0を満たすx1,y1をとれば、 x1>c1>y1>となるc1については、e^(-c1)>k, ゆえに、(1)から|e^(-x)-e(-y)|>k|x-y|となり、成り立たない。 (i),(ii)より、求めるkの最小値は1である。 という解答ですが 〉0<k<1とすると、k<e^(-x)<1 とありますがなぜそういえるのかがわかりません。どなたか教えていただけないでしょうか?
- 3×3行列の固有値重解時の対角化の方法
行列A= | 1 2 2 | | 0 2 1 | |-1 2 2 | とします。 固有値、固有ベクトルを求め、 正則行列Pを用いて対角化する時の手順ですが、 何度やっても最終的に対角化できません。 おそらく固有ベクトル・正則行列の求め方に問題があるのだと思うのですが、 問題点を指摘して頂けないでしょうか? 解答が手元に無く、皆さんに助けを求めさせて頂きました。 【固有値】 |A-λE|=0として (λ-1)(λ-2)^2=0 固有値λ=1, 2(重解) 【固有ベクトル】 (A-λE)X=0より (i)λ=1の時 |0 2 2||X1| |0 1 1||X2|=0 |-1 2 1||X3| ∴{X2+X3=0 {-X1+2X2+X3=0 X3=kとおくと X2=-k,X1=-k ∴固有ベクトル |-1| p1=k|-1| | 1| (ii)λ=2(重解)の時 |-1 2 2||X1| | 0 0 1||X2|=0 |-1 2 0||X3| ∴{-X1+X2+X3=0 {X3=0 {-X1+2X2=0 X3=X1-X2 X1=s,X2=tとおくと X3=s-t ∴固有ベクトル | 1 | |0| p2=s| 0 |+t|1| |0.5| |1|より 直行行列 |-1 1 0| P= |-1 0 1| | 1 0.5 1| とする。 また、 直交行列の逆行列 |-1 -2 2| P-1= 1/5| 4 -2 2| |-1 3 2| これらを用いて計算すると |1 -6 -4| P-1AP= |0 14 36| |0 1 26| となり、途方にくれてしまいます。 |1 0 0| |0 2 0| |0 0 2|になってくれません。 どこで間違いをおしているのでしょうか? 教えて下さい。
- ベストアンサー
- 数学・算数
- MATHOSHIETE
- 回答数3
- どのように記述すれば画像を分かたずに表示できるのでしょうか?
どのように記述すれば画像を分かたずに表示できるのでしょうか? <HTML> <BORDER="0"> <IMG SRC="A_720x32.bmp"><BR> <IMG SRC="B_315x136.bmp" ALIGN=TOP><IMG SRC="C_250x199.bmp" ALIGN=TOP><IMG SRC="D_155x307.bmp"> <IMG SRC="E_315x171.bmp"><IMG SRC="F_250x108.bmp"><BR> <IMG SRC="A_720x32.bmp"> </HTML>
- ベストアンサー
- HTML
- yamadayouichirou
- 回答数6
- 独立関数変数の問題を解いてるのですが・・・
独立関数変数の問題を解いてるのですが・・・ X1,X2,....,Xn,....は標準正規分布に従う独立関数変数とする P(│X1+・・・+Xn/n│≦ε)=2∫ε√n 1/√2π・eの-x二乗/2 dx 0 を示せ(上はインテグラルの範囲が0からε√nという意味です) X1+・・・+Xnの大きさが0.01より小さい確率が0.95以上であるためにはnはどの程度の大きさが必要か決定せよ。I(z)=∫z 1/√2π・eの-x二乗/2 dxとおくと、I(1.96)=0.475となることを参考にして 0 よい。 みにくくて申し訳ありません。 教科書とにらめっこ状態なので誰かお助けお願いします。
- プログラム作成アドバイス下さい(初心者)
N88互換BASICのフリーソフトにて作成しています。 正の実数aの平方根ルートa(a^1/2)をニュートンラプソン法で求めるプログラムを組む問題です。下記が手順です。 1、定数aを入力(a>0)、今回解くべき方程式は、f(x)=x^2-a=0であるから、その導関数はf(x)=2xである。 2、初期値X0にaを代入し、X1を求める。 3、X0とX1から、相対誤差E=|(X1-X0)/X0|を求める。 4、X1とEを画面表示する。 5、収束判定定数EPSの値を10^-5とし、これと相対誤差を比較する。 6、EがEPSより大きければ、得られた根は収束が足りないと思われるので、次のX2を求める。(2、へ移動) EがEPSより小さければ、十分な精度で収束したと考え、7へ。 7、最後にSQR(a)を画面表示して終了。 とりあえず下記のように進めましたが続きが分かりません。続きはどのような計算ですか? 10 Rem 正の実数a平方根a^1/2を、ニュートン・ラプソン法で求めるプログラムを組む問題。 20 Cls 30 Print "正の実数の平方根を求めます。" 40 EPS = 0.00001 50 INPUT "a=";A 60 IF A<=0 THEN END ELSE GOTO 70 70 Print "a="; 80 Print USING; "#.####^^^^"; A 面倒なプログラムですが、宜しくお願いします。
- ベストアンサー
- Visual Basic
- astro26
- 回答数2
- アプリケーションエラー
パソコンの電源を落とす時に表示されます。 原因はなんでしょうか NotityWndproc: msimn.exe アプリケーションエラー \"0x100097e\"の命令が\"0x100097e\"のメモリを参照しました。メモリが\"read\"になることはできませんでした。 プログラムを終了するには[OK]をクリックしてください プログラムをデバックするには[キャンセル]をクリックしてください
- 締切済み
- Windows XP
- noname#117448
- 回答数3
- 高校数学の行列です
A=(a,b,c,d)(行列で順に左上、右上、左下、右下の順)(a,b,c,d∈R),A≠kE(k∈R),A≠Oとする (1)Aの固有値λと固有ベクトル↑xが存在する条件はλが固有方程式λ^2-(a+d)λ+ad-bc=0(1)の解であることを証明せよ (2)(1)が異なる実数の固有値(λ=)α、βをもつとき、それらに対する固有ベクトル (↑x=)↑x1,↑x2は1次独立であることを証明せよ (3)特にb=cのとき、(2)において↑x1⊥↑x2であることを証明せよ (1)はA↑x=λ↑x,↑x≠↑0(⇔A↑x//↑x(広義平行),↑x≠0) ⇔(A-λE)↑x=↑0,↑x≠↑0 ⇔(a-λ,b,c,d-λ)(x,y)=(0,0),(x,y)≠(0,0) ⇔det(A-λE)=(a-λ)(d-λ)-bc=0 ⇔λ^2-(a+d)λ+ad-bc=0 となっていたのですが ⇔(a-λ,b,c,d-λ)(x,y)=(0,0),(x,y)≠(0,0)ここまでは分かりましたが、 この次の⇔det(A-λE)=(a-λ)(d-λ)-bc=0これは何で言えるんですか? (x,y)は0では無いですが、行列って互いに0でなくても掛けたら0になることはありますよね、それに0になったとしてもdetも0になるんですか? (2),(3)は解説を読むと分かって参考のようにして ケーリーハミルトンの定理 A^2-(α+β)A+αβE=Oが成り立つから↑0でない任意の平面ベクトル↑xに対して A(A↑x-β↑x)=α(A↑x-β↑x) A(A↑x-α↑x)=β(A↑x-α↑x) よって(A↑x-β↑x)//↑x1,A(A↑x-α↑x)//↑x2とあったのですが (A↑x-β↑x)//↑x1,A(A↑x-α↑x)//↑x2が何故成り立つのか分かりません その後すなわち行列(A-βE),(A-αE)によって任意のベクトル↑xはそれぞれα、 βの固有ベクトル↑x1,↑x2にへ行くなベクトルに変換されるとあったのですが、これも何の事か良くわからないのですが、詳しい説明をよろしくお願いします (注)として行列Aが固有値α、β(α≠β)と固有ベクトル↑x1,↑x2をもつ場合、平面上の任意のベクトル↑xを↑x1,↑x2に平行なそれぞれのベクトル↑p,↑qに直和分解して↑x=↑p+↑qとする このとき、行列P=1/(α-β)×(A-βE),Q=1/(β-α)×(A-αE)はそれぞれ↑xを↑x1,↑x2上へ平行射影する1次変換である すなわち P↑x=↑p,Q↑x=↑q 特に行列Aが対称行列のときP,Qは正射影の行列になるとあるのですが ↑qに直和分解して↑x=↑p+↑qとする までは分かりますが、この後の説明 がさっぱりわかりません、詳しくお願いします
- ベストアンサー
- 数学・算数
- arutemawepon
- 回答数3
- PCI-ExpressとPCIExpress16
1,下のPCに下のグラフィックボードを増設したいのですが、可能でしょうか。 (PCI ExpressとPCI-Express X16は同じものですか?) >拡張スロット PCI : PCIスロット:1スロット(Low Profile)(パラレルポート選択時占有済)[空き:1] >PCI Express : PCI Express x1スロット:1スロット(Low Profile)[空き:1] http://www.toppage.ne.jp/asp/product_detail.asp?tpcode=210005212060000782&user=tp >インターフェース : PCI-Express X16 http://www.amazon.co.jp/%E7%8E%84%E4%BA%BA%E5%BF%97%E5%90%91-%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%83%89-PCI-Ex16-GF210-LE1GHD-D3/dp/B007SQJ7GM/ref=wl_it_dp_o_pC_nS_nC?ie=UTF8&colid=IF1XJWTRW1UP&coliid=I2LROZ0OOI9OZQ
- ベストアンサー
- ビデオカード
- kanagawa9696
- 回答数2
- ブルースクリーンが出て困ってます
最近ペーパーマンをやり始め、起動した10分後くらいに・・ブルースクリーンが出て困ってます・・・・・ 2度連続でブルースクリーンがでました・・・・ 1回目のエラーコード(?) 0x1000008e 0xc0000005 0x86f79f90 0xb1930cdc 0x00000000 2回目のエラーコード(?) 0x1000008e 0xc0000005 0x86426f92 0x8da19cdc 0x00000000 なんか3日目がきそうで怖くなってきました…… 解決方法ありませんか? 一応ペーパーマンは危険そうなのでアンインストールしました。
- ベストアンサー
- Windows Vista
- -hai-
- 回答数1
- 単位あわせ
以下の式が成り立っているとします。 A= (B・C) / (D・E) Bの単位は、[個]、Cは[μA/cm^2] Dは[個/cm^3]、Eは[C]です。 Eの[C]は[A・秒]です。 この場合、Aを[nm/分](速度の単位)にしたいのですが 途中経過がさっぱりわかりません(数学苦手なもので。。。) たとえば、B=0.06[個]、C=1.95[μA/cm^2] D=5x10^22[個/cm^3]、E=1.60x10^(-19)[C]の時のAの値[nm/分]っていくらになるのでしょうか? 途中経過も詳しく教えていただけると嬉しいです。 よろしくお願いいたします。
- ブルースクリーンエラー
ブルースクリーンエラー 困っています。 出るメッセジは0x1000008e、0x00000019、 0x1000008e、0x0000007f、0x10000050 など様々でパソコンを立ち上げて 30分位リセットをボタンを数回押すと エラーメッセジが続くのですが 何とかwindowsが立ち上がります。 安定すると1晩でも電源を落とさない限り エラーがでなくて動き続きます。 メモリーテストは何度やっても完走 HDDは3台ブート可能なwindowsが入った ものがありますが差し替えて使っても 同じような症状です。 OSはwindows xp マザーはP4GD1 何を疑ったら良いんでしょうか? 識者の方お助けください。
- 締切済み
- Windows XP
- naoki-koshka
- 回答数2
- f(x)=xのf'(x)と∫f(x)dxのグラフ化
f(x)=xのf'(x)と∫f(x)dxのグラフ化したいのですがここからどうすればいいのか分からず足踏みしてます。ご教授ください。 積分区間は0~xです。 import java.awt.*; import java.awt.event.*; public class graphics0 extends Frame { // コンストラクタ public graphics0(){ setSize(500, 500); setVisible(true); setTitle("graphics0"); // メッセージ処理 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } // メインメソッド public static void main(String[] args){ new graphics0(); } // ペイントメソッド public void paint(Graphics g){ //ここに絵をかくコードを書く // 中心座標 int ox = 250; int oy = 250; // グラフの幅 int width = 200; int height = 200; //直線描画のための2点(x0,y0), (x1, y1) double x0, y0; double x1, y1; // 刻み幅 double d = 0.001; double n = (int) (1.0 / d); // 軸の描画 g.drawLine(50, 250, 450, 250); g.drawLine(250, 50, 250, 450); x0 = 0; y0 = 0; x1 = d; for(int i = 0; i < n; i++){ y1 = x1 * x1; g.drawLine( (int) (x0 * width) + ox, -((int)(y0 * height) -oy), (int) (x1 * width) + ox, -((int) (y1 * height) - oy)); x0 += d; x1 += d; y0 = y1; } } } よろしくお願いいたします。
- 締切済み
- Java
- yellow_peril
- 回答数1
- JScriptの問題です。添削お願いします。【至急!】
f(x)=cos(x)-x^2=0の解を割線法により求めよ、という問題です。 初期値はx1=1,x2=0.5です。 以下は自分で解答を作りました。 自分で怪しいと思うところはわかるのですが、それをどう正せばいいかわかりません。 添削お願い致します。 割線法の公式は、 X_(n+1)=X_n-{(X_n-X_(n-1))/(f(X_n)-f(X_(n-1))}*f(X_n) として考えました。 var e=0.001 , x1=1.0 , x2=0.5 , N=27; function f(x){return Math.cos(x)-x*x;} WScript.Echo("割線法:\n"+SplitLine(N,e,x1,x2)); function SplitLine(N,e,x1,x2){ var x=x1,x2,xn,str=""; for(var i=1; i<N; i++){ str+=(i+1)+" "+x+"\n"; xn=x-((x-(x-1))/(f(x)-f(x-1)))*f(x); //←ここが違うのでしょうか? if(Math.abs((xn-x)/x)<e) break; x=xn; } return str; }
- ベストアンサー
- JavaScript
- mina37_sjt
- 回答数2
- Swing実装での図形の追加と色の指定追加
以下の作成した図形描写javaプログラムに図形の変更ボタン(円や直線)、色選択(例:赤、青、緑の三種)をおこなうことの出きるようにすればどうすれば良いでしょうか? import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; abstract class Figure { protected int x,y,width,height; protected Color color; public Figure(int x,int y,int w,int h,Color c) { this.x = x; this.y = y; width = w; height = h; color = c; } public void setSize(int w,int h) { width = w; height = h; } public void setLocation(int x,int y) { this.x = x; this.y = y; } abstract public void reshape(int x1,int y1,int x2,int y2); abstract public void paint(Graphics g); } class RectangleFigure extends Figure { public RectangleFigure(int x,int y,int w,int h,Color c) { super(x,y,w,h,c); } public void reshape(int x1,int y1,int x2,int y2) { int newx = Math.min(x1,x2); int newy = Math.min(y1,y2); int neww = Math.abs(x1 - x2); int newh = Math.abs(y1 - y2); setLocation(newx,newy); setSize(neww,newh); } public void paint(Graphics g) { g.setColor(color); g.drawRect(x,y,width,height); } } class DrawApplication { protected Vector<Figure> figures; /* Generics */ protected Figure drawingFigure; protected Color currentColor; protected DrawPanel drawPanel; public DrawApplication() { figures = new Vector<Figure>(); /* Generics */ drawingFigure = null; currentColor = Color.red; } public void setDrawPanel(DrawPanel c) { System.out.print("セットされました"); drawPanel = c; } public int getNumberOfFigures() { return figures.size(); } public Figure getFigure(int index) { return (Figure)figures.elementAt(index); } public void createFigure(int x,int y) { Figure f = new RectangleFigure(x,y,0,0,currentColor); figures.addElement(f); drawingFigure = f; drawPanel.repaint(); } public void reshapeFigure(int x1,int y1,int x2,int y2) { if (drawingFigure != null) { drawingFigure.reshape(x1,y1,x2,y2); drawPanel.repaint(); } } } class DrawPanel extends JPanel { protected DrawApplication drawApplication; public DrawPanel(DrawApplication app) { setBackground(Color.white); drawApplication = app; app.setDrawPanel(this); } public void paintComponent(Graphics g) { super.paintComponent(g); Figure f = new RectangleFigure(0,0,0,0,drawApplication.currentColor); for(int i=0;i<drawApplication.getNumberOfFigures();i++){ f = drawApplication.getFigure(i); f.paint(g); } } } class DrawMouseListener implements MouseListener,MouseMotionListener { protected DrawApplication drawApplication; protected int dragStartX,dragStartY; public DrawMouseListener(DrawApplication a) { drawApplication = a; } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { dragStartX = e.getX(); dragStartY = e.getY(); drawApplication.createFigure(dragStartX,dragStartY); } public void mouseReleased(MouseEvent e) { drawApplication.reshapeFigure(dragStartX,dragStartY,e.getX(),e.getY()); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseDragged(MouseEvent e) { drawApplication.reshapeFigure(dragStartX,dragStartY,e.getX(),e.getY()); } public void mouseMoved(MouseEvent e) { } } class DrawMain { public static void main(String argv[]) { JFrame f = new JFrame("Draw"); DrawApplication app = new DrawApplication(); JPanel c =new DrawPanel(app); c.addMouseListener(new DrawMouseListener(app)); c.addMouseMotionListener(new DrawMouseListener(app)); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(c,BorderLayout.CENTER); f.setSize(400,300); f.setVisible(true); } }
