- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:18:41 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.47【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1200464091/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 695 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:02:56 ]
- >>692
試しに、printf("%u\n", A.FILED.element4)にしてみたら? >>693 適切かどうかは兎も角、間違ってはいないんじゃないか?
- 696 名前:692 mailto:sage [2008/02/15(金) 02:19:25 ]
- >>695
上手くいってないような雰囲気です。 どっか自分が処理を間違えているかもしれないので、 原因を探してみます。
- 697 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:47:09 ]
- 手元のgccだとちゃんと1になるけどなぁ。
- 698 名前:デフォルトの名無しさん [2008/02/15(金) 02:47:14 ]
- >>694
上位32bitがEDXに格納されるのは解りました。 それをどうやってUINT64の変数に代入するのでしょうか。 一応、以下みたく物凄く邪道な感じでやってみたり・・・ UINT64 mul64(UINT a, UINT b) { FILETIME c; _asm { mov eax, a mul b mov c.dwHighDateTime, edx //mov dword ptr [ebp-8],eax mov c.dwLowDateTime, eax //mov dword ptr [ebp-4],edx } return *(UINT64*)&c; } >mov dword ptr [ebp-8],eax >mov dword ptr [ebp-4],edx のインラインアセンブラでの正しい記述方法が解らないです。
- 699 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:54:44 ]
- >>698
C側で対処するならこんなんとか。 union { struct { uint32 l; uint32 h; } s; uint64 w; } c; _asm { mov c.s.l, eax mov c.s.h, edx } return c.w;
- 700 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:56:12 ]
- これでいいよ。
__declspec(naked) UINT64 __cdecl mul64(UINT a, UINT b) { _asm { mov eax, a mul b ret } }
- 701 名前:デフォルトの名無しさん [2008/02/15(金) 03:29:18 ]
- >>699
なるほど、適当に構造体定義してやればいいのか。 >>700 これは警告も出ないしスマートだし関数でやるならこちらが良いですね。 解決です。ありがとうございました。
- 702 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 04:57:05 ]
- >>681
ありがとうございます。C++はCの標準関数+これらが使えるのね
- 703 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 05:17:09 ]
- こんな感じでも行ける
UINT64 res; _asm { mov eax, a mul b mov dword ptr[res], eax mov dword ptr[res+4], edx } return res;
- 704 名前:デフォルトの名無しさん [2008/02/15(金) 14:36:08 ]
- DLLから要求があるまで動作を停止したいのですが、どのようにしたらいいんでしょうか?
メインのグローバルハンドルを共有出来ないですよね?
- 705 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:01:58 ]
- >>704
環境とやりたいことを具体的に。どうせ、Windowsだろうけど。
- 706 名前:デフォルトの名無しさん [2008/02/15(金) 15:33:29 ]
- すみません 似たような質問なんですが
WaitForSingleObject( HANDLE hHandle, // オブジェクトのハンドル DWORD dwMilliseconds // タイムアウト時間 ); ってHANDLEがNULLになるまで待つんですか?どういう価でうごくか教えて下さい
- 707 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:36:24 ]
- hHandleがシグナル状態になるか、タイムアウトになるまで待つ。
シグナル状態は、そのhHandleが何かによって変わる。 CreateEventしたやつならSetEventしたやつ、とかね。
- 708 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:40:37 ]
- >>706
もしそれが、WinAPIのWaitForSingleObjectならば>707。 詳しくは、MSDNかAPIスレへ。 もしそうでないなら、環境を提示すること。
- 709 名前:デフォルトの名無しさん [2008/02/15(金) 16:13:48 ]
- サンクス
- 710 名前:デフォルトの名無しさん [2008/02/15(金) 20:52:12 ]
- HTMLの文字コードをS-jisにしたいのですが、インターネットエクスプローラで読み込んでS-Jisで書きだというのをC言語でできませんか
- 711 名前:デフォルトの名無しさん [2008/02/15(金) 20:53:50 ]
- 文書全体をS-jisに変換してタグを書き換えるというのでは正しく表されないことが多いです
インターネットエクスプローラは変換精度が高いです
- 712 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:16:31 ]
- すいません、質問があります。
{ A a; B b; } と二つのクラスを確保したとき、デストラクタの呼ばれる順番というのは仕様で 定められているのでしょうか?それとも不定なのでしょうか? よろしくお願いします。
- 713 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:21:15 ]
- デストラクタは、コンストラクタが呼び出されたの全く逆の順で呼ばれる。
- 714 名前:デフォルトの名無しさん [2008/02/15(金) 21:23:44 ]
- すいません。1次元固定配列をを積み重ねて、
2次の動的配列にしたいのですが。 data[4]固定 data[4] data[4] ↓ 動的 typedef std::vector<int> Four; std::vector<Four> data; にすれば確かに動作するのですが、 これでは両方1次も2次も動的です。 よそのスレで typedef int Fou[4]; std::vector<Four> data; とすればいいと言われましたが スレ違いでこれ以上尋ねるわけにも行かずこちらへ 来ました。 Four four; for(i=0; i<5; i++){ for(j=0; j<4; j++){ four[j]=j; } data.push_back(????); } ここの????の書き方が分かりません。 よろしくお願いします。
- 715 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:27:13 ]
- >>713
すばやい回答ありがとうございます。継承の時と同じなのですね。
- 716 名前:デフォルトの名無しさん [2008/02/15(金) 21:31:00 ]
- >714
すいません、コピーがうまくいきませんでした。 書き込みがTABを上手いこと反映してくれないみたいですね。
- 717 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:32:58 ]
- >>710-711
日本語でおk
- 718 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:48:34 ]
- >>714
push_back は無理。 構造体にするならいける。 struct Four { int four[4]; };
- 719 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:50:00 ]
- boost::array<int, 4>ってvectorの要素にできない?
- 720 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:19:07 ]
- できる
- 721 名前:デフォルトの名無しさん [2008/02/15(金) 23:03:34 ]
- 関数の中でたまにでてくる参照引数
(int & みたいな・・) ってどういうとき使うんですか?? 複数の関数内で1つの変数を使いたいときとかですか?
- 722 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:04:13 ]
- >>721
コピーコンストラクタ作るとき
- 723 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:05:43 ]
- >>721
・ 呼び出し元の変数の値を変更したい時 ・ 巨大なオブジェクトをコピーせずに関数に渡したい時
- 724 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:12:44 ]
- //身長を整数値として読み込んで標準体重を実数で表示
#include <stdio.h> int main() { int na; int weight; printf("身長を入力してくれ:"); scanf("%d", &na); weight = (na - 100) * 0.9; printf("標準体重は%4.1f Kg", weight); return 0; } これを実行しても標準体重が0.0 Kgになるんだけどどこを改善すればいいのでしょうか?
- 725 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:14:04 ]
- >>724
×int weight; ○float weight;
- 726 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:17:22 ]
- >>724
そのコードでちゃんと警告を出してくれるコンパイラに換えるか、そのように設定する。
- 727 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:36:08 ]
- >>725-726
こんなのも分からん馬鹿でサーセン。cygwin使ってるんだけどロクに設定もできていないもんでして。 ありがとうございます。
- 728 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:36:33 ]
- △float weight;
○double weight;
- 729 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:41:41 ]
- >>727
つ[gcc -Wall foo.c]
- 730 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:46:09 ]
- gcc -ansi -pedantic -Wall オススメ
- 731 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:47:50 ]
- 寧ろ、gcc -std=c99 -Wall -pedantic で。
- 732 名前:デフォルトの名無しさん [2008/02/15(金) 23:59:03 ]
- >718
構造体にしたらできました。 ありがとうございます。
- 733 名前:デフォルトの名無しさん [2008/02/16(土) 00:01:46 ]
- >719
boost::array自体が定義できないけど、必要なヘッダファイルとか あったら教えてください。 VC6.0を使っています。
- 734 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:10:27 ]
- >>733
まずはBOOSTでぐぐって来るんだ
- 735 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:35:37 ]
- VC6 でコンパイルできるかなあ。
まあ array くらいならできるか。
- 736 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:41:19 ]
- 環境ってMicrosoft Visual C++ 6.0って書けば分かる?
- 737 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:04:52 ]
- 考えてある程度予想してみたんですが、この考えで合ってますか?
質問大量ですみませんが (1)char *p="aaaaaaaaaaaaaaaaaaaaaaaaaaaa";やc="aaaaaaaaaaaaaaaaaaaaaaaaaaaa" ↑ポインタってアドレスを格納するのに何で文字列を入れれるの? これはどこのアドレスを入れてるの? 自動的に領域を確保して"aaaaaaaaaaaaaaaaaaaaaaaaaaaa"を入れてそのアドレスを入れてるってことですか? もしそうだとしたら、関数内で宣言してその関数からでた場合はその領域は開放されるんでしょうか? (2)cout<<sizeof(c)<<endl;とした場合4になる どうみてもaは5つ以上あるのになんで4なの? これはchar *pのサイズ(参照するアドレスを入れる領域のサイズ)だからですか? ちなみにstrlenだと35でした。 (3)sprintf(c,"aaaaaaaaaaaaaaaa");や strcpy(c,"aaaaaaaaaaaaaaaa");でコンパイルして実行するとエラー これは確保されていない領域に無理矢理文字列を突っ込もうとしてるからですか?
- 738 名前:737 mailto:sage [2008/02/16(土) 04:07:15 ]
- ごめんなさい間違えました。cを全部pとして考えてください
ついでに言うと(1)の2つめはこんなの char *p; p="aaaaaaaaaaaaaaaaaaaaaaaaaaaa";
- 739 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:14:11 ]
- 文字列リテラル(" " で囲んでるやつ)は、
その文字列の置いてあるアドレスを返す。
- 740 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:18:58 ]
- ありがとうございます。ということは
プログラム起動した時点でa〜zや日本語,記号の全ての文字がメモリのどこかに 自動的に置かれるってことですか? それとも"aaaa"の部分を実行した時点で文字列"aaaa"がメモリに置かれる?
- 741 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:19:58 ]
- 起動した時点で置かれてる。
- 742 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:20:42 ]
- 起動した時点で、"aaaa" が置かれる、ね。
- 743 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:27:32 ]
- >>741-742
ありがとうございます。今まで知らずに使ってきました。 ずっと気になってたので教えてもらえてスッキリした
- 744 名前:デフォルトの名無しさん [2008/02/16(土) 08:26:22 ]
- >735
げ、自分でコンパイルするのか。 c++標準なのかと思った。
- 745 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 08:33:14 ]
- >>744
Boostは事実上の準標準。 一部のライブラリ以外はヘッダのincludeのみで使える。
- 746 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:08:08 ]
- >>737
> (3) sprintf(c,"aaaaaaaaaaaaaaaa");や strcpy(c,"aaaaaaaaaaaaaaaa"); > でコンパイルして実行するとエラー > これは確保されていない領域に無理矢理文字列を突っ込もうとしてるからですか? 違う。 領域は確保されているが、文字列を突っ込めない (要は、書けない) 領域だから。 エラーになるかどうかは環境によって異なる。 素直に書き換わる環境もあるし、単に書き換わらないだけとか、全然別の場所の 文字列が勝手に書き換わるとかすることもある。 要するに、文字列の領域を書き換えるのは基本的にやってはいけない。 >>741-742 規格でそんなこと決まってたっけ?
- 747 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:25:51 ]
- >>746
staticな変数と同じ寿命に決まっている。
- 748 名前:デフォルトの名無しさん [2008/02/16(土) 09:39:06 ]
- HTMLファイルの構文を解析して、UTF8形式をS-JIS形式に変換するにはどうすればいいですか?
- 749 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:40:49 ]
- >>748
っ NKF
- 750 名前:748 [2008/02/16(土) 09:41:44 ]
- インターネットエクスプローラで読み込んで、S-jisで保存するのをプログラムでやりたいんです
- 751 名前:748 [2008/02/16(土) 09:43:06 ]
- >>749
すみません よんでませんでした NKFはやったのですが、エンコード属性が指定されていたりして、文字化けしてしまいます タグを解析する必要があるんです
- 752 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:59:59 ]
- >>747
そもそも static な変数の寿命なんて決まってたっけ? 例えば、自動変数の寿命ははブロックに入った時から出るまでじゃないだろ。 利用されている区間がかぶらないとわかれば、違う変数を同じレジスタに割り 当てるコンパイラは珍しくない。 それと同じで、利用されてる区間がかぶらない static 変数を同じ領域に割り 当てちゃいかんのか?
- 753 名前:デフォルトの名無しさん [2008/02/16(土) 10:08:02 ]
- インターネットエクスプローラの名前をつけて保存 (エンコード指定) だけを利用するには
どうすればいいですか?
- 754 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:40:02 ]
- >>752 のいう同じ領域っていうのは物理メモリの領域を指してるの?
- 755 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:44:34 ]
- >>753
「IEコンポーネント」で調べてみては?
- 756 名前:デフォルトの名無しさん [2008/02/16(土) 10:52:38 ]
- >>753
HTMLの解析とコード変換はMSXMLとADODBを使えばできるがお前には無理。
- 757 名前:デフォルトの名無しさん [2008/02/16(土) 10:55:58 ]
- インクルードファイルだけ入れて
boost::array<int,4> d; std::vector<d> data; と定義だけはエラーが出ないのはいいのですが 実際はどのように使えばいいのでしょうか。 d[0]=0; d[1]=1; d[2]=2; d[3]=3; data.push_back(d); //この部分がエラー としてもコンパイルエラーが出ます。
- 758 名前:デフォルトの名無しさん [2008/02/16(土) 11:06:03 ]
- >757
すいません。できました。別に原因があったようです。
- 759 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:31:11 ]
- #include <stdio.h>
class Test{ public: static int ary[4]; }; int Test::ary[] = {0,1,2,3}; int main(){ printf("%d\n", Test::ary[2]); } すみません。上記のように1次元配列だと初期化できるのですが 2次元配列にするとどう記述しても初期化できません。 例えば static int ary[2][4]; }; int Test::ary[] = {0,1,2,3, 5,6,7,8}; にすると error C2040: 'ary' : 'int []' は 'int [2][4]' と間接操作のレベルが異なります。 となりますし 多次元配列のメンバ変数を初期化する方法はないものでしょうか?
- 760 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:42:03 ]
- >>759
int Test::ary[] = {0,1,2,3, 5,6,7,8}; これはおかしいよ。 int Test::ary[2][4] = { { 0,1,2,3 }, {5,6,7,8} }; とかじゃないの?
- 761 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:51:33 ]
- >>760
有難うございます。上手くいきました。 int Test::ary = { { 0,1,2,3 }, {5,6,7,8} }; や int Test::ary[][] = { { 0,1,2,3 }, {5,6,7,8} }; や int Test::ary[0][0] = { { 0,1,2,3 }, {5,6,7,8} }; で試してみて上手くいかなかったのでどうやるのかと思っていました。 [2][4]と書けば良かったのですね。
- 762 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:04:02 ]
- >>752
厳密には寿命と記憶期間は別物だが、 大抵の人は普段は記憶期間の意味で寿命という言葉を使う。
- 763 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:16:55 ]
- 記憶期間なんて言う俺俺用語を語られても...
- 764 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:23:50 ]
- 記憶域期間だった
- 765 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:43:32 ]
- auto_ptrについて質問です。
以下のコードを実行したとき、throw(A)のあとで TTestクラスのデストラクタが呼び出されると思っていたのですが呼び出されません。 auto_ptrってこういうものなのでしょうか? TTest* TTest::NewL() { std::auto_ptr<TTest> self(new TTest()); throw 1; // A return self.release(); }
- 766 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:47:54 ]
- 例外を投げた際、デストラクタが呼ばれるのは例外が捕捉された時。
例外が捕捉されなければ呼ばれないかもしれない(環境依存)。 auto_ptr の問題じゃなくて、C++ の仕様の問題。
- 767 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:48:27 ]
- >>765
catchしたか
- 768 名前:765 mailto:sage [2008/02/16(土) 12:53:01 ]
- すみません、catchしたかどうかが重要とは知らず書いてませんでしたが、catchはしています。
ちなみに、std::auto_ptrの部分を自作のsmart_ptr(スマートポインタの解説サイトを参考に作成) にした場合はきちんとデストラクタが呼ばれました。 コンパイラはBorland C++ Compiler 5.82 なのですが、これのauto_ptrがポンコツなのかも…
- 769 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:58:41 ]
- memory ヘッダの中を読んでみたら?
- 770 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:01:09 ]
- とりあえず gcc だと呼ばれる。
- 771 名前:765 mailto:sage [2008/02/16(土) 13:12:49 ]
- う〜ん、中身見てみましたがおかしいと思えるところは見つからず…
auto_ptrのソースをちょこっと改造して試したところauto_ptrのデストラクタ自体が呼ばれてないようでした。 ただ、gccだと正常に呼ばれるとのことなのでBCCが悪いということで解決します。 どうも、ありがとうございました。
- 772 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:16:48 ]
- BCC の「どこが」悪いかちゃんと調べないと、
他の所でも沢山困る所があるかもしれないぜ。
- 773 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:19:46 ]
- とりあえず俺がチェックに使ったコード。
どう表示される? #include <iostream> #include <memory> class Test { public: Test(int n) : n(n) { } ~Test() { std::cout << "~Test(" << n << ")" << std::endl; } static Test* New() { Test test1(1); std::auto_ptr<Test> test2(new Test(2)); throw 1; return NULL; } private: int n; }; int main() { try { Test* test = Test::New(); test = test; } catch(int n) { std::cout << "catch" << std::endl; } return 0; }
- 774 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:26:09 ]
- >>773
BCCで試したところ、以下のように表示されました。 やはりtest2が削除されないようです。 ~Test(1) catch >>772 確かに…引き続き調査はしてみます。
- 775 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:27:49 ]
- memory をいじってコンストラクタで文字列表示するようにして、
それが表示されるかチェックしてみれ。
- 776 名前:デフォルトの名無しさん [2008/02/16(土) 13:56:28 ]
- HTMLファイルの構文を解析して、UTF8形式をS-JIS形式に変換するソースありますか
- 777 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:00:52 ]
- >>776
あるけどおまえにはそれすら無意味
- 778 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:28:58 ]
- >>752
staticな変数の生存期間はそのプログラムが起動されてから終了されるまで。 絶対に外部から参照される恐れが無い場合でもなければ、使い回しはできない。 例えば、strtok()やlocaltime()は内部のstaticな領域を返すように実装されていることが多い。 従って、その関数を呼び出した先で参照する可能性があるからコンパイラはこれを取り除くことができない。
- 779 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:07:48 ]
- > 絶対に外部から参照される恐れが無い場合でもなければ
そのときの話をしてるんだが? アドレス取られたら削除できないのはあたりまえ。 また、絶対に外部から参照されないケースなんてほとんどないので、 大概の実装ではそんな最適化をしていないと思う。 問題にしているのは、規格としてそう言うことをしていいかどうか だよ。
- 780 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:23:33 ]
- >>779
規格を云々したいのなら折角そういうスレがあるんだからそちらへどうぞ。
- 781 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:25:24 ]
- 異なるオブジェクトは異なるアドレスを持たないという規定がなかったかな?
仮にあったとしても、779の状況では、 プログラム上から異なるアドレスであることを確かめるすべはないと思うけど。
- 782 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:08:56 ]
- とりあえず、同じ内容の文字列リテラルが複数箇所に書かれた場合、
それらは同じアドレスに置いても構わない。 また、"abc" というのと "bc" というのがあった場合、 "bc" のアドレスが "abc" + 1 であっても構わない。
- 783 名前:デフォルトの名無しさん [2008/02/16(土) 18:00:20 ]
- struct f_point{ float x, y; };
f_point square[4]; // 正方形の頂点が入る for(float angle=0;angle<PI*2;angle+=PI/16){ ... } 構造体squareに正方形の頂点4点の平面座標が入るとして、 その正方形の中心を軸に回転させるには forの中でどういう風に書けばよいでしょうか?
- 784 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:08:56 ]
- そういう扱い方するんだったら、
正方形を中心と、どれか1つの頂点の角度とで扱えばいいんじゃね?
- 785 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:13:27 ]
- >>783
宿題スレでもいけばいいんじゃね?解答もらえるよ x, yをx + y iの複素数とみなして cosθ + i sinθを掛けた値の実部と虚部を取る 計算を行うようにするとか x * cosθ-y * sinθ, x * sinθ+y * cosθ になるんじゃなかったかな多分
- 786 名前:デフォルトの名無しさん [2008/02/16(土) 18:15:37 ]
- 中心px,py 半径r 角度θ
x度回転するには、σ(n) = θ + (x+90n) *π/360 px + r cosσ(n) , py r sinσ(n)に変換する
- 787 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:17:45 ]
- ループ変数に float 使うなよ・・・。
誤差で境界条件が重い通りにならないかもしれないんだから。
- 788 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:19:30 ]
- ×構造体square
○構造体f_pointの配列square つ[アフィン変換]
- 789 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:22:09 ]
- (原点ずらす移動の変換行列) × (回転行列) × (原点戻す移動の変換行列)
をかければいいんだろ
- 790 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:27:16 ]
- 境界条件っつーと、微分方程式の特種解を決定する物を思い浮かべてしまう
なんかビミョーな違和感
- 791 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:38:47 ]
- // オレ言語ならこれで逝けるぜw
f_point center = average(square, square + 4); for (int angle = 0; angle <= 360; ++angle) { for (int ic = 0; ic < 4; ++ic) { print ([square[ic].x square[ic].y] - [center.x center.y]) * [cos(angle * rad) sin(angle * rad); -sin(angle * rad) cos(angle * rad)] + [center.x center.y]; } } // 要は、正方形の中心が原点になるように移動して、回転してから再び移動(≒>789)
- 792 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:43:04 ]
- >>785
ほんとごめんなさい、よく読んでませんでした 原点中心回転してました
- 793 名前:デフォルトの名無しさん [2008/02/16(土) 19:51:23 ]
- 文字列で入力された
char a ; を、関数の中で数値に変換して int a ; にしたいんだ 同じ変数名aなんだけど char → int ってできますか?(´`)
- 794 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:55:18 ]
- スクリプト言語を使った方が幸せになれそうな予感
- 795 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:00:53 ]
- >>793
それだと1文字だろうし最初からintで受け取ればいい
|

|