スレを勃てるまでもないC/C++の質問はここで 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/09/17(水) 15:41:48過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
0327デフォルトの名無しさん
2008/11/21(金) 17:19:19そうです
string5個の配列で、各stringはconst char*引数を取るコンストラクタに "A" などを渡して初期化する、ということです
0328デフォルトの名無しさん
2008/11/21(金) 17:33:10つまり文字数+nullのchar型の配列5個宣言するみたいな感じですか?
0329デフォルトの名無しさん
2008/11/21(金) 17:42:19stringクラスはもっとずっと複雑な動作をします
0330デフォルトの名無しさん
2008/11/22(土) 00:40:250331デフォルトの名無しさん
2008/11/22(土) 02:33:09basic_string<>を
0332デフォルトの名無しさん
2008/11/23(日) 01:30:03USBのシリアルキーを読むプログラムを作成したのですが、
ビルド>実行ではデバッグビルド、リリースビルド共に問題ありません。
しかし、ビルドしたあとに生成されたプログラム(○○.exe)を実行すると
共に正しく動作しません(シリアル番号が読み取れない)。
○○.exeを右クリック>別のユーザーで実行する>管理者権限
でやっても同様の結果になります。
なにかしら解決へ向けてのヒント等いただければと考えています。
0333デフォルトの名無しさん
2008/11/23(日) 11:27:02カレントディレクトリの違いにより DLL や依存ファイルの読み込みに失敗しているとか。
0334デフォルトの名無しさん
2008/11/23(日) 12:32:49レスありがとうございます。
DLLが読みこみに失敗した場合はOSによるエラーが出現すると考えていますが、
どうでしょうか?
依存ファイルは#pragma commentによるlib、設定した追加インクルード系くらいしかありません。
現在、fwprintfでテキストアウトしながら、挙動を調べています。
0335デフォルトの名無しさん
2008/11/23(日) 22:21:01GetLastError()は何か返してないの
0336332
2008/11/24(月) 12:57:22レスありがとうございます。
GetLastErrorを使いながら、原因を探り無事問題解決しました。
肝となる変数がとなる関数内部のローカルなアドレス値を参照しており、
それを関数外で参照してしまいこのような原因を引き起こしておりました。
初歩的なミスをしておりました。
スレ汚し申し訳ありませんでした。
100年ROMります。
0337デフォルトの名無しさん
2008/11/24(月) 15:30:25デフォルトコンストラクタに初期化リストを書いて宣言した場合、
引数付きコンストラクタでもその初期化はなされるのでしょうか?
それとも同じ初期化リストを書かなければならないのでしょうか?
0338デフォルトの名無しさん
2008/11/24(月) 20:05:520339デフォルトの名無しさん
2008/11/24(月) 21:14:15入力した文字を逆から出力するプログラムを作っているのですが
どうも上手くいきません。
char str[4];
str[0] = `a`;
str[1] = `b`;
str[2] = `c`;
str[3] = `\0`;
とあり、逆から表示したい場合、
str[3]から出力していけば良いと思っているのですが、
ループを設定しても何も出力されませんでした。
ググってもポインタ等を使うやり方が多くて見当もつきません。
いったい、どうやれば出力されるのでしょうか?
0340デフォルトの名無しさん
2008/11/24(月) 21:28:31__, --──−、_
/::_, -‐─ ‐-、_::::`‐-、
. /::/ `‐i:::::::ヽ
|:./ ',ミ::::::}
}:l lミ::::::l'
_!,'_ ,..-- ..、 __ !::::::::|
lヽ! `i ィェッ、.i'゙"i';;;ィェッ;,`i===,、
',.l ゙、゙゙゙゙゙,ノ ヽ_"゙゙ ゙/ r;;;;;;/
i|  ̄,' ::::ヽ `''" .,{;;;;;;/
',. ゙`-"゛'' ,};;;;;;'
! ,_、,___, /;;;/"
_,` 、 /;;r'
_,, -─ '';;;;;;;;;| 、ヽ,,____,,-‐';;;;;;;;;;;\_
;;;;;;;;;;;;;;;;;;;;;;;;;;| \ _//;;;;;;;;;;;;;;;`ヽ、
;;;;;;;;;;;;;;;;;;;;;;;;;;| r‐ィt- '" /;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;| /,彡彡} ,!;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ツレマスカ [Vladimir Tzlemazka]
(1915-1997 ロシア)
0341デフォルトの名無しさん
2008/11/24(月) 21:32:18int i=4;
while(i--){
printf("%c", str[i]);
}
0342デフォルトの名無しさん
2008/11/24(月) 22:29:05str[1] = 'b';
str[2] = 'c';
str[3] = '\0';
の逆は
str[0] = 'c';
str[1] = 'b';
str[2] = 'a';
str[3] = '\0';
ではないだろうか
0343デフォルトの名無しさん
2008/11/25(火) 00:25:46そのDLLからダイアログを表示させようとしています。
// グローバル変数でCDialogから派生したクラス
CCertifier *crtDlg;
// 以下2行。どこかの関数内部
crtDlg= new CCertifier;
crtDlg->DoModal();
のコードでDoModalを呼び出したところで"Debug Assertation Failed!"のダイアログが出て来ます。
出来ればモーダルウィンドウの方で表示させたいのですが、そちらの方のコードでも同じ症状が出ています。
何方か原因を分かる方などいらっしゃらないでしょうか?
一応環境はWinXP、開発環境はVS2005です。
0344デフォルトの名無しさん
2008/11/25(火) 00:33:440345デフォルトの名無しさん
2008/11/25(火) 00:58:58そして再びDLLをロードした後で関数を呼び出すと、再度作られるのですか?
0346デフォルトの名無しさん
2008/11/25(火) 09:07:47変数の扱いが変わると思うその理由とは? C言語からおさらいしてこい。
0347343
2008/11/25(火) 11:03:45えっと、CCertifierクラスは
「リソースの追加」でダイアログ追加→「クラスの追加」→以下作成ウィザードで作成
で作成したものなので、ダイアログテンプレート等の基本的な所は全自動のはずです
0348>>345
2008/11/25(火) 12:18:33DLLのロードを行う関数ではなくて、DLLモジュール内の関数という意味でお願いします。
0349デフォルトの名無しさん
2008/11/25(火) 12:23:03>346
0350>>345
2008/11/25(火) 12:29:010351デフォルトの名無しさん
2008/11/25(火) 12:40:36破棄されないと使えるメモリがどんどん少なくなるよ
0352デフォルトの名無しさん
2008/11/25(火) 17:09:36newで確保した変数はdeleteで開放する必要がありますが、普通の変数や配列は自動的に開放されるのですか?
0353デフォルトの名無しさん
2008/11/25(火) 17:12:310354デフォルトの名無しさん
2008/11/25(火) 17:26:530355デフォルトの名無しさん
2008/11/26(水) 00:15:240356デフォルトの名無しさん
2008/11/26(水) 00:52:040357デフォルトの名無しさん
2008/11/26(水) 02:01:440358デフォルトの名無しさん
2008/11/26(水) 12:15:51みなさん童貞ですか?
0359デフォルトの名無しさん
2008/11/26(水) 12:58:010360デフォルトの名無しさん
2008/11/26(水) 13:56:360361デフォルトの名無しさん
2008/11/26(水) 18:26:23その関数は実行することは出来ないという理解で良いでしょうか?
0362デフォルトの名無しさん
2008/11/26(水) 18:36:25継承を勉強してないうちは気にしないでいい。
0363デフォルトの名無しさん
2008/11/26(水) 18:45:50仮想関数で、サブクラスに実装を任せた云わば雛形的な役割だと思っていたのですが・・・
実行はできるのでしょうか?
というのも、いま読んでいるコードでは親クラスでvirtual関数で定義し、継承したクラスでもvirtualを付けているにも関わらず内部を実装しているので、virtualが付いていても実行できるのかと思いました。
長文で初歩的な質問失礼しました。
0364デフォルトの名無しさん
2008/11/26(水) 18:51:54>サブクラスに実装を任せた
ってのは = 0 をつけた純粋仮想関数のことじゃないかな。
0365デフォルトの名無しさん
2008/11/26(水) 19:03:01派生クラスで、オーバーライドする関数にvirtualを付けるのは、それを読む人間相手の目印でしかない。
0366デフォルトの名無しさん
2008/11/26(水) 19:03:05new 子クラス名
となっているので継承した側だと思います。
他にこの仮想関数をオーバーロードしているところもないので、このvirtual付き関数を呼び出しているようにしか見えないのですが…
0367デフォルトの名無しさん
2008/11/26(水) 20:21:49真面目に勉強する気が無いなら人間やめとけ。答はちゃんと書かれている。
0368デフォルトの名無しさん
2008/11/26(水) 21:43:02簡潔に言うと、
ふつうのメンバ関数はコンパイル時に静的にバインドされるが、
仮装関数は実行時に動的にバインドされる
0369デフォルトの名無しさん
2008/11/26(水) 21:54:54, を表示させようとするとなんか上手く表示されません
カンマを表示するにはどうすればいいんですか?
0370デフォルトの名無しさん
2008/11/26(水) 22:29:35そうやって質問するってことは、
printf(",");
じゃダメなんだろうな。何がしたいのかわからんから答えようがない
0371デフォルトの名無しさん
2008/11/26(水) 23:11:141000の位のカンマなら、SUSv2独自だから他の環境では大抵巧くいかない。
0372デフォルトの名無しさん
2008/11/27(木) 18:33:450373デフォルトの名無しさん
2008/11/27(木) 21:15:58FreeBSD+GCC 3.xをつかっているのですが、
#define BUF_LEN 1024
char buffer[BUF_LEN];
FILE *tokenlist;
のときに、
fgets(buffer, BUF_LEN, tokenlist);
を実行すると、セグメンテーションエラーがおこることがあります。
しかしいくら原因を考えてもわかりません。
そもそもfgetsはセグメンテーションエラーがおこらないようつくられた関数ときいていたので困惑しています。
ほかの環境(Linux+GCC4、Cygwin+GCC4)では問題なく動くため、BSD特有の現象なのでしょうか?
ご教示お願いします。
0374デフォルトの名無しさん
2008/11/27(木) 21:42:450376デフォルトの名無しさん
2008/11/27(木) 22:04:26リリースビルドしたExeファイルを開発環境で実行する分には正常動作。
他のPCで実行すると下記エラーが出る。
Microsoft Visual C++ Runtime Library
[Runtime Error!]
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
:開発環境
VisualStudio2005Pro+WindowsDriverKit6001.18001
:問題起こしそうなヘッダ、ライブラリ
追加インクルードパス>WINDDK\6001.18001\inc\api
winmm.lib shlwapi.lib
usbiodef.h usbioctl.h atlcoll.h setupapi.h
winioctl.h cfgmgr32.h atlstr.h
:試したこと
DirectX9.0bインストール
Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)インストール
0377デフォルトの名無しさん
2008/11/27(木) 22:40:45再現可能な最低限のコードを貼ってくれ。
その断片だけ見ても何とも言えない。
0378373
2008/11/27(木) 22:57:18わかりました。
次のようにmain関数でtokenlistにファイルを関連づけます。
tokenlistはグローバル変数です。
int main(int argc, char **argv)
{
(略)
tokenlist = fopen(argv[1], "r");
(略)
getToken();
(略)
}
getToken関数でfgetsを行います。
void getToken() {
char buffer[BUF_LEN]; /* バッファ */
(略)
fgets(buffer, BUF_LEN, tokenlist);
(略)
}
このgetToken関数は、その他の関数でtokenlistの次の行の情報が必要になるたびに呼ばれます。
よろしくお願いします。
0379デフォルトの名無しさん
2008/11/27(木) 23:01:48にほんごわかりますか?
恐らくどっかでtokenlistを壊しているのだろうよ。
再現する最低限のソースを作る過程で見つかることもしばしばだから
やれと書いているのにそれすらできないんじゃ望み薄だが。
0380初心者
2008/11/27(木) 23:13:54現在、独習C++で勉強しています。
中級者向けの本、お勧めの本などありましたら
教えていただければ幸いです。
0381デフォルトの名無しさん
2008/11/27(木) 23:15:270382デフォルトの名無しさん
2008/11/27(木) 23:17:25http://pc11.2ch.net/test/read.cgi/tech/1227705211/56
0383373
2008/11/27(木) 23:34:00ソースが非常に巨大なためその点はご迷惑をおかけしました。
とりあえずtokenlistをあまり長期間保持しないように変えました。
ご教示ありがとうございました。
0384デフォルトの名無しさん
2008/11/28(金) 02:47:13何で初心者が?
0385376
2008/11/28(金) 12:36:14Dr.JamsaのC++超入門
自分はこれが一番しっくり来たっす。
>>380
C++標準ライブラリの使い方完全ガイド。
STLは中級者レベル?(初心者レベルだったらスマソ)
>>376なんですが、他で質問した方がいいですかね?
0386デフォルトの名無しさん
2008/11/28(金) 12:42:38状況を細かく噛み砕いてDirectXスレ辺りへどうぞ。
0387376
2008/11/28(金) 12:48:20レスありがとうございます。
確かに質問内容がだめでした。
もう少し、”○○を使うと他でエラーが出る”くらいまでやるべきでした。
エラーをもう少し特定して他スレ行ってきます。
0388デフォルトの名無しさん
2008/11/28(金) 13:29:160389デフォルトの名無しさん
2008/11/28(金) 14:52:040390デフォルトの名無しさん
2008/11/28(金) 14:55:25できる環境もあればできない環境もあります。
0391デフォルトの名無しさん
2008/11/28(金) 15:00:38できる環境の場合のやり方を教えてください。
0392デフォルトの名無しさん
2008/11/28(金) 15:11:13できる環境の場合、そうなるようにやります。
その方法は、大抵の場合複数あります。
0393デフォルトの名無しさん
2008/11/28(金) 16:17:46getcharの実行中はプログラムは止まったままだと思いますが
どうやってやるのでしょう?
0394デフォルトの名無しさん
2008/11/28(金) 16:25:29ゲームとかキー入力うけつけながら残り時間表示とかしてるだろ?
0395デフォルトの名無しさん
2008/11/28(金) 16:25:51スレッド作成して別スレッドで時計表示
0396デフォルトの名無しさん
2008/11/28(金) 17:02:26Windowsなら
メッセージ処理する
Directinput使う
conio.h使う
など
0397デフォルトの名無しさん
2008/11/28(金) 18:09:55ありがとうございます。大体分かりました。ところで、下のプログラムを実行すると
main関数のgetchar以降が実行されないみたいなんですがどうしてなんでしょう?
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void thread(void);
int main(void) {
int handle;
pthread_t id;
int c;
handle = pthread_create(&id, NULL, (void *(*)(void*)) thread, NULL);
while(1) {
printf("Main\n");
c = getchar();
printf("Main %d\n", c);
usleep(500*1000);
}
}
void thread(void)
{
usleep(500*1000);
while(1) {
printf("Thread %d\n", (unsigned) time(NULL));
usleep(1000*1000);
}
}
0398デフォルトの名無しさん
2008/11/28(金) 18:28:12なんで自分の環境を書かないの?
>397でUnix系と言うことは判ったけど。
で、getchar()で止まっているスレッドよりもusleep()で止まっているスレッドが優先されているだけじゃないのかね。
少なくとも私の環境(cygwin)では巧くいくようだよ。
0399デフォルトの名無しさん
2008/11/28(金) 18:30:48ありがとうございました。解決しました。
0400デフォルトの名無しさん
2008/11/28(金) 21:06:47if文を利用する価値ってどんなもんですか?
リアルタイムで変化しうる1万個のフラグがあって、1/60秒ごとに全てのフラグをチェックする必要があるが、if文ひとつでチェックすべきフラグが9千個ほどにまで削減できるとしたら。
if文を入れても入れなくても処理速度は変化しないとすれば、このif文に価値ってありますか?
0401デフォルトの名無しさん
2008/11/28(金) 21:13:06最初コストの話かと思ったんだが、そういう風にも見えないのでもう少し説明が欲しい
0402デフォルトの名無しさん
2008/11/28(金) 21:14:240403デフォルトの名無しさん
2008/11/28(金) 22:27:15そのフラグはif文を使わずに何を使ってチェックするのかね。
0404デフォルトの名無しさん
2008/11/28(金) 22:47:21究極的に言えば、「わずかな処理を省くためにif文を入れるべきか」って話です。
八千個のフラグチェックを削減できるなら「効率化」、五千個の削減も「効率化」、四千、三千も「効率化」と呼べるでしょう。
それなら、千個の削減は「効率化」か、五百個、百個、五十個は……。と考えていくと、どこまでが「効率化」と呼べるのか、と疑問に思ったので。
『状況や環境による』と言われてしまえばそれまでなのですが……。
「ソースを増やしてでも最大限処理を減らすべき」か「体感できない程度の無駄なら無視すべき」か、どちらを優先すべきなのか悩まされてしまいます。
0405デフォルトの名無しさん
2008/11/28(金) 22:50:380406デフォルトの名無しさん
2008/11/28(金) 23:16:38んで、速度が問題になったときに何をすべきかというと、そのif文を入れることではなく、
そのif文を入れることで問題が解消されるのかどうかを考えるべき。
0407デフォルトの名無しさん
2008/11/29(土) 17:02:360408デフォルトの名無しさん
2008/11/29(土) 18:26:42何でそれが疑問なの? 右と左のどちらを優先すべきかと聞かれたら、普通は右だと思うでしょ。
右は桁を+する方向だし、プラスとマイナスを逆順にしたいやつはいないと思うんだけど。
0409デフォルトの名無しさん
2008/11/29(土) 18:50:33それだと上下が下上になってないとおかしいと思うんだけど
0410409
2008/11/29(土) 18:54:090411デフォルトの名無しさん
2008/11/29(土) 20:21:35順番なんてテキトーにつけるしかない
0412デフォルトの名無しさん
2008/11/29(土) 21:11:09いやさ、だから何で疑問に思うのか説明してよ。上下に関しては、左上原点なんてのは視野が狭いとしか。
上下と左右の順序については、どちらを重視するかの問題。
>>411
一応人間工学では、上下のボタンを左右に並べざるを得ない場合には右側に上ボタンを配置することになっている。
これはどうやら、右から左に書く文化圏でもその方がいいらしいよ。
0413デフォルトの名無しさん
2008/11/30(日) 01:01:410414デフォルトの名無しさん
2008/11/30(日) 07:33:56クイックソートをwikipediaで調べると
1. ピボットとして一つ選びそれをPとする。
2. 左から順に値を調べ、P以上のものを見つけたらその位置をiとする。
3. 右から順に値を調べ、P以下のものを見つけたらその位置をjとする。
4. iがjより左にあるのならばその二つの位置を入れ替え、2に戻る。
ただし、次の2での探索はiの一つ右、次の3での探索はjの一つ左から行う。
5. 2に戻らなかった場合、iの左側を境界に分割を行って2つの領域に分け、そのそれぞれに対して再帰的に1からの手順を行う。
要素数が1以下の領域ができた場合、その領域は確定とする。
注:このアルゴリズムでは、領域の左端の値が領域内で最小かつ同じ値が他の位置に無い場合
ピボットとしてその値を選ぶと同じ領域を再帰的に呼び出す無限ループとなってしまう。
とあるのですが、この注の意味がどういうことかわからないのですが
ピボットが左端で値が最小だとどうして無限ループになってしまうんでしょうか?
0415デフォルトの名無しさん
2008/11/30(日) 09:39:36コンピュータのつもりになって気を利かさず愚直に書いてあることにそのまま従ってみればいいんだよ。
1. P は左端の最小値
2. i は左端
3. j は左端
4. i == j なので左じゃないから skip
5. i の左側を境界に分割しても左端なんだから今と変わらない 1 領域のまま。1に戻って同じことの繰り返し。
0416デフォルトの名無しさん
2008/11/30(日) 12:36:18なんか関数名を型変換するようなプログラムがちゃんと動いたんで。
0417デフォルトの名無しさん
2008/11/30(日) 13:06:230418デフォルトの名無しさん
2008/11/30(日) 13:08:18関数名は変数じゃありませんが、関数名を参照すると関数へのポインタと言う値になります。
0419デフォルトの名無しさん
2008/11/30(日) 19:12:33int day;
day=atoi(argv[1]);
if(0<argv[1]<32){
int foo,baa;
かくかくしかじか
}
else{
printf("日にちは1から31で入力してください¥n");
}
return 0;
}
と書いておけば
もしコマンドライン引数が41の場合これはかくかくしかじかは実行されませんよね?
どこのバグだかわからなく困っているので助けてください。
0420デフォルトの名無しさん
2008/11/30(日) 19:14:520<argv[1]<32
こんな条件文は無いかと
0 < argv[1] && argv[1] < 32
じゃね?
0421デフォルトの名無しさん
2008/11/30(日) 19:18:35ありゃ?有りませんでしたっけ
すこしLispかぶれして帰ってきて
たしかCだと一つの括弧でかけるから便利なんだよなと思い
<で挟んでみたのですが、記憶がちがったのかもしれません。
確認してみた所無事に動きました。
非常に助かりました。
0422デフォルトの名無しさん
2008/11/30(日) 19:29:51Javaで非常にシンプルなボタンの作成をしてみました。
なぜだか、5番目のボタンだけキャプションが表示されません。
環境はWin+eclipseです。
トラブルシュート、ログはたくさん見たのでその他のなにか考えなければならないヒントなどいただけると
た す か り ま す
public class Test {
public void method(){
int i;
Button h[]=new Button [9];
int dx[]={1,2,3,4,5,6,7,8,9};
int dy[]={1,1,1,1,1,1,1,1,1};
String st[]={"aa","ii","uu","ee","oo","か","き","く","け"};
Display display = new Display();
Shell shell=new Shell(display);
shell.open();
for(i=0; i<9; i++){
h[i]=new Button(shell,SWT.BORDER);
h[i].setBounds(dx[i]*50,dy[i]*30,50,30);
if(i!=4){h[i].setText(st[i]);}}
while(!shell.isDisposed()){if(!display.readAndDispatch()){display.sleep();}}
display.dispose();}
public static void main(String[] args){
Test test = new Test();
test.method();}}
0423デフォルトの名無しさん
2008/11/30(日) 19:32:12じゃなくて?
意図からすると
1 <= day && day <= 31
か?
0424デフォルトの名無しさん
2008/11/30(日) 19:34:54んあ、c++のスレだった。
スレ汚しスマソ。
Javaに言ってきまふ。
422は無視してくだせい。
0425デフォルトの名無しさん
2008/11/30(日) 20:00:51> if(0<argv[1]<32){
・折角数値に変換したのに、元の文字列と比較してどーする
・C/C++では a<b<c という条件式は
文法上は書けるが、見た目とは相反する動きになるから
a<b && b<c と書くべき
(普通の処理系なら a<b は成り立てば1、成り立たなければ0
a<b<cは、(1か0)<c という式として翻訳されてしまう)
0426デフォルトの名無しさん
2008/11/30(日) 20:07:39ユーザーがランダムな順番で入力した四角形の4つの頂点座標のCPoint型(x,y座標を保持)の変数の中から
四角形の左上の頂点がどれかを判定したいのですが
うまい方法が思いつきません。
1番左 かつ 1番の上の座標を求めれば良いだけジャン…と思っていたんですが
//CPoint cp0, cp1, cp2, cp3には既にx,y座標が代入済みとする
//四角形の左上座標がどれか4つの中からを決める
CPoint tmp;
tmp = cp0;
if ( tmp.x >= cp1.x ) if ( tmp.y >= cp1.y ) tmp = cp1;
if ( tmp.x >= cp2.x ) if ( tmp.y >= cp2.y ) tmp = cp2;
if ( tmp.x >= cp3.x ) if ( tmp.y >= cp3.y ) tmp = cp3;
return tmp;//左上座標を返す
長方形だとこれで問題なさそうなんですが、例えば極端に歪んだ平行四辺形とかだと
左から2〜3番目の頂点が左上頂点だったり(例:上底、下底が水平で下底が思い切り左に寄っている)
上から2〜3番目の頂点が左上頂点だったり(例:右辺、左辺が垂直で右辺が思い切り上に寄っている)
等のケースに対応できません。
0427デフォルトの名無しさん
2008/11/30(日) 20:33:50左上って定義が曖昧すぎないか?
全てのパターンを分ける以外方法無いと思う
■ このスレッドは過去ログ倉庫に格納されています