hidebun の回答履歴
- 動画の遅延再生プログラム
PCとPCカメラを使って、 10秒前後の遅延再生する簡易プログラムを 作りたいと思っております。 WEBカメラのドライバのフリーソフト EWCLIBを利用して、下記ソースまで 作ったのですが、高スペックなPCにも かかわらず、フレームレートが ばらつきます。 フレームレートは30にしており、 妥協して15にしても同様の 問題がおこるので、おそらくWindowsかカメラの 自動制御が悪さをしていると思われます。 当方試行錯誤したのですが、ついに行き詰りました。 ソースの改良、ハードの取替え、動作環境の 変更等対策がありましたらご教授願います。 ちなみに高価なものであれば、すでに同機能以上の ものが世の中にあるのは把握しておりますので、 なるべくなら、安価に仕上げれるものが 望ましいです。 #include <esplib.h> #include <ewclib.h> #pragma comment(lib, "winmm.lib") #include <crtdbg.h> #define FRAMES 60 #define WX 320 #define WY 240 float a=0,b=0,c=0; void ESP_Ready(void) { ESP_CreateImage(0,"000",0,0,WX,WY,400); ESP_OpenTextWindow(0,86,512,439,135); ESP_Printf("初期化中...\n"); int r= EWC_Open(WX,WY,15); if(r){ ESP_Printf("Error %d\n",r); return; } ESP_Printf("Startをクリックしてください.\n"); } void ESP_Main(void) { int w=0; int **latesc; latesc = new int*[FRAMES]; for(int i=0;i<FRAMES;i++){ latesc[i] = new int[WX*WY]; } for(;;){ a=timeGetTime(); CopyMemory(ESP_VramPtr[0],latesc[w],WX*WY*4); // フレームバッファを指定 ESP_Select(0); ESP_Update(); // 新しいフレームが来るまで待つ for(;;){ Sleep(1); if(EWC_IsCaptured(0)) break; } // フレーム番号 r の表示 c=timeGetTime(); b = c - a; ESP_Locate(0,5); ESP_Printf("ewc_time[0]= %f [s]\n",b); ESP_Locate(0,3); ESP_Printf("w=%03d\n",w); EWC_SetBuffer(0,latesc[w]); w=(w+1)%(FRAMES-1); //wには最後に書き込まれたフレームを指定する if(ESP_STOP) break; } for(int i=0;i<FRAMES;i++){ delete[] latesc[i]; } delete[] latesc; ESP_Printf("Stop\n"); } void ESP_Finish(void) { EWC_Close(); }
- 動画の遅延再生プログラム
PCとPCカメラを使って、 10秒前後の遅延再生する簡易プログラムを 作りたいと思っております。 WEBカメラのドライバのフリーソフト EWCLIBを利用して、下記ソースまで 作ったのですが、高スペックなPCにも かかわらず、フレームレートが ばらつきます。 フレームレートは30にしており、 妥協して15にしても同様の 問題がおこるので、おそらくWindowsかカメラの 自動制御が悪さをしていると思われます。 当方試行錯誤したのですが、ついに行き詰りました。 ソースの改良、ハードの取替え、動作環境の 変更等対策がありましたらご教授願います。 ちなみに高価なものであれば、すでに同機能以上の ものが世の中にあるのは把握しておりますので、 なるべくなら、安価に仕上げれるものが 望ましいです。 #include <esplib.h> #include <ewclib.h> #pragma comment(lib, "winmm.lib") #include <crtdbg.h> #define FRAMES 60 #define WX 320 #define WY 240 float a=0,b=0,c=0; void ESP_Ready(void) { ESP_CreateImage(0,"000",0,0,WX,WY,400); ESP_OpenTextWindow(0,86,512,439,135); ESP_Printf("初期化中...\n"); int r= EWC_Open(WX,WY,15); if(r){ ESP_Printf("Error %d\n",r); return; } ESP_Printf("Startをクリックしてください.\n"); } void ESP_Main(void) { int w=0; int **latesc; latesc = new int*[FRAMES]; for(int i=0;i<FRAMES;i++){ latesc[i] = new int[WX*WY]; } for(;;){ a=timeGetTime(); CopyMemory(ESP_VramPtr[0],latesc[w],WX*WY*4); // フレームバッファを指定 ESP_Select(0); ESP_Update(); // 新しいフレームが来るまで待つ for(;;){ Sleep(1); if(EWC_IsCaptured(0)) break; } // フレーム番号 r の表示 c=timeGetTime(); b = c - a; ESP_Locate(0,5); ESP_Printf("ewc_time[0]= %f [s]\n",b); ESP_Locate(0,3); ESP_Printf("w=%03d\n",w); EWC_SetBuffer(0,latesc[w]); w=(w+1)%(FRAMES-1); //wには最後に書き込まれたフレームを指定する if(ESP_STOP) break; } for(int i=0;i<FRAMES;i++){ delete[] latesc[i]; } delete[] latesc; ESP_Printf("Stop\n"); } void ESP_Finish(void) { EWC_Close(); }
- C言語 正弦関数の級数展開
はじめまして。 sinxの級数展開を7項まで取った場合と組み込み関数で求めたsinxの値の差を,0度から360度まで,プログラムを作成して求めよ、という問題があるのですが、300度まででとまってしまいます。 どなたか、わかる方がいまいたら、教えてください。 以下リストです。 #include <stdio.h> #include<conio.h> #include <math.h> const double pi=atan(1.0)*4; double kaijyo(int n) { double ret=1; for (int i=2;i<=n;i++) { ret*=i; } return ret; } double polSin(double theta,int order) { int i; double ret=theta; for (i=1;i<order;i++) { if (i%2==1) { ret-=pow(theta,(i*2+1))/kaijyo(i*2+1); } else { ret+=pow(theta,(i*2+1))/kaijyo(i*2+1); } } return ret; } int main() { int order=7; double rad,theta,trueVal,polVal; for (theta=0;theta<360;theta+=1.0) { rad=theta/180*pi; trueVal=sin(rad); polVal=polSin(rad,order); printf("%e\n",polVal-trueVal); } getch(); return 0; }
- 関数内、ファイルのstatic変数
関数内で、static変数を宣言した場合に、その値は保持されると 思いますが、その関数の外からポインタで見る場合にその値は 保証されるのでしょうか? (必ず同じメモリ上に配置されるのでしょうか?) また、関数とファイル内static変数においてスコープ以外に 取り扱いが変わったりするのでしょうか? (配置されるメモリ空間等) よろしくお願い致します。
- sqliteの構造体
SQLiteを使ったメールソフトを作っています。 sqliteの構造体 sqlite3_stmt の宣言は見つかるのですが 構造体の内容の定義してあるものが見つかりません。 sqlite3.h, sqlite3.c を探したのですが見つかりませんでした。 この構造体が見つからないと そこに登録してある値が使えません。 それとも、 この構造体は定義されていなくて これを当てにしないで プログラムを組まなくてはいけないのでしょうか? 使わなくても動かせそうですか。。。 お分かりの方、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- koinobori7
- 回答数5
- EPOS 24/1 ドライバによるDCモータ制御プログラム(C言語)
パソコンにCANボード(型式LPC-485120)を内蔵しDCモータ、EPOS 24/1 ドライバをそれぞれ二個使用し、ロボットを動かす(制御)したいのですがどのようなC言語プログラムを書けばいいのでしょうか? まだ学生で初心者なんで詳しく教えて頂けたらありがたいです。
- sqliteの構造体
SQLiteを使ったメールソフトを作っています。 sqliteの構造体 sqlite3_stmt の宣言は見つかるのですが 構造体の内容の定義してあるものが見つかりません。 sqlite3.h, sqlite3.c を探したのですが見つかりませんでした。 この構造体が見つからないと そこに登録してある値が使えません。 それとも、 この構造体は定義されていなくて これを当てにしないで プログラムを組まなくてはいけないのでしょうか? 使わなくても動かせそうですか。。。 お分かりの方、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- koinobori7
- 回答数5
- sqliteの構造体
SQLiteを使ったメールソフトを作っています。 sqliteの構造体 sqlite3_stmt の宣言は見つかるのですが 構造体の内容の定義してあるものが見つかりません。 sqlite3.h, sqlite3.c を探したのですが見つかりませんでした。 この構造体が見つからないと そこに登録してある値が使えません。 それとも、 この構造体は定義されていなくて これを当てにしないで プログラムを組まなくてはいけないのでしょうか? 使わなくても動かせそうですか。。。 お分かりの方、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- koinobori7
- 回答数5
- sqliteの構造体
SQLiteを使ったメールソフトを作っています。 sqliteの構造体 sqlite3_stmt の宣言は見つかるのですが 構造体の内容の定義してあるものが見つかりません。 sqlite3.h, sqlite3.c を探したのですが見つかりませんでした。 この構造体が見つからないと そこに登録してある値が使えません。 それとも、 この構造体は定義されていなくて これを当てにしないで プログラムを組まなくてはいけないのでしょうか? 使わなくても動かせそうですか。。。 お分かりの方、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- koinobori7
- 回答数5
- 関数引数に対する制限値チェック方法
引数に対する制限値チェック方法 プログラミング(組み込み系C言語)関数作成時にいつも私が迷ところなのですが、 関数の引数に対する制限値(範囲外)チェックどうするか、次の(1)、(2)で悩んでます。。 【1】関数内で制限値チェックで行い、制限値外であれば戻り値でエラーコードを返す。 【2】関数呼び出し時に、引数となる値(変数)をチェックし、制限値内であることを確認してから、関数を呼び出す。 上記の【1】、【2】の方法どちらがよいでしょうか? 状況にもよるとは思うのですが、その場合はどういった状況時に(1)||(2)がよいのか教えてください。 (【3】もあればお願いします。) --【1】がお勧めの場合の質問 (1)本関数での"結果"を返したいときどうすればよいかアドバイスください。 戻り値("結果")と、エラーコードを兼用するのはなんかイヤです。。 エラーコード付き関数は、全て同じ戻り値(1:OK時、-1:NG時 みたいに) としてまとめたいからです。 (2)極端にほとんどの関数の戻り値を、OK/NG とす。これってどうですか?、 /////////////////////// 【1】、【2】の利点、欠点を僕なりに考えてみました。 ##【1】の利点/欠点 利点: ・本関数呼び出し時に、毎回制限チェックをしなくてよくなる。 (汎用的に様々な場面で、使用するのであればこれは良い利点だと思います。) 欠点: ・戻り値のとして、エラーコードを返さなくてはならないため、本関数での結果を返したい場合、 以下方法をとらないといけない。 1、引数をポインタとして、その引数で値を返す。 2、戻り値として、エラーコードと兼用して返す。 (例:エラー時の戻り値 = 0、正常にの戻り値 = 1~ 255) ##【2】の利点/欠点 利点: ・エラーコードを返す必要がなくなるため、戻り値が有効利用できる。 欠点: ・関す呼び出し毎に、制限チェックが発生し、制限チェック忘れが発生する。 (汎用的に使うにのであればなお・・・)
- ファイルへ書込み
こんにちわ。 ■質問1 ファイルへの書込み(書替え)をどうやってやればいいか悩んでいます。 既に存在する aaa.txt という名前のファイルがあるとします。 aaa.txtをファイルオープンし、ある文字列をキーに検索し、 値を書替えたいのです。 以下の例の様にaaa.txtに、書かれているとします。 例)aaa.txtファイルの中身 LOOP_CNT1=50 LOOP_CNT2=100 LOOP_CNT3=200 LOOP_CNT4=300 LOOP_CNT5=400 "LOOP_CNT3"という文字列をキーに、ファイルから対象文字列を検索し、設定値の 200 を 10000 に書き換えたいのです。 書き換える値、10000 はパラメータから取得します。 書き換えれる場合、それ以降の文字列の値が 上書かれてしまったり、領域を壊してしまったりはしないでしょうか? いい方法があったら教えてください! ■質問2 新規でオープンしたファイルに、 DBからループ処理で取得した値を書き込む処理を行うとします。 ※データは何件あるか分からず、なくなるまで処理します。 エラーが起きた場合のみ、ファイル書込み処理を行っていても 最終的には何も書かれていない0バイトファイルを作成したいのですが どのようにやればいいでしょうか? ※一時的にテンポラリ領域に、格納してエラーがなかった場合のみ ファイルへ書込む場合、テンポラリはどのような持ち方をすれいいで しょうか? テンポラリ用にchar型の変数を用意? データが何件あるか分からないので、 変数のサイズはどのように宣言すればいいですか? そもそも考え方が間違っていますか?
- C言語初心者です。
はじめて質問します。よろしくお願いします。 私は学生で、卒業研究でC言語についてやっているのですが、 あまりにも難しくてよく理解できません。 先生に聞いても専門的な事をおっしゃるので、 何の事かさっぱりわかりません。 今しているのは、技術評論社の「H8マイコンプログラミング入門」という本のH8マイコンによって空気圧サーボと呼ばれる機械を動かすプログラムを、電波新聞社の「USB機器の製作」という本のAKI-H8というマイコンで動作させるというものです。 とりあえず、AKI-H8でLEDを点灯させたりボタンを押したりする簡単なサンプルプログラムのようなものを幾つか教えていただければと思います。プログラムは全然初心者で理解できていないのでよろしくお願いします。
- 締切済み
- C・C++・C#
- yakiyakimi
- 回答数2
- C言語初心者です。
はじめて質問します。よろしくお願いします。 私は学生で、卒業研究でC言語についてやっているのですが、 あまりにも難しくてよく理解できません。 先生に聞いても専門的な事をおっしゃるので、 何の事かさっぱりわかりません。 今しているのは、技術評論社の「H8マイコンプログラミング入門」という本のH8マイコンによって空気圧サーボと呼ばれる機械を動かすプログラムを、電波新聞社の「USB機器の製作」という本のAKI-H8というマイコンで動作させるというものです。 とりあえず、AKI-H8でLEDを点灯させたりボタンを押したりする簡単なサンプルプログラムのようなものを幾つか教えていただければと思います。プログラムは全然初心者で理解できていないのでよろしくお願いします。
- 締切済み
- C・C++・C#
- yakiyakimi
- 回答数2
- C言語で秒単位の数値をコンソールタイプから入力して、その値を時分秒に変換して画面に表示したいのですが、、、
こんばんは、大学1年生です。 授業で、C言語を勉強しているのですが原理などもよく分からず困ってます。 質問なのですが、C秒単位の数値をコンソールタイプから入力して、その値を時分秒に変換して画面に表示したいのですが参考書などを見てもサッパリです。ソースを教えていただくと助かります。ちなみに、与えられた値を時分秒に変換する部分は関数でお願いします。
- 修正箇所の指摘のお願い(文字列の書き出し)
C++についての質問です。 あるテキストファイルを読み込み、行頭の空白文字(スペース)を 削除して、別のテキストファイルへ書き出すプログラムを 作成しています。 下記のようにコーディングを行いましたが、 読み込みファイルの1行目が書き出されず、最終行が2回 書き出される状態となってしまいました。 お手数ですが、修正箇所を教えて頂けないでしょうか。 ************************************************************ #include <iostream> #include <string> #include <fstream> using namespace std; #define INPUT_FILE "C:\\input.txt" #define OUTPUT_FILE "C:\\output.txt" int main() { ifstream fin(INPUT_FILE); ofstream fout(OUTPUT_FILE); char str[255]; if(!fin) { cout << "入力ファイルを開けません\n"; return 1; } if(!fout) { cout << "出力ファイルを作成できません\n"; return 1; } fin.getline(str,254); while(!fin.eof()) { std::cin.setf( std::ios::skipws ); // スペースの読み飛ばし fin >> str; fout << str << std::endl; } fin.close(); fout.close(); return 0; } ************************************************************ よろしくお願いします。
- Eclipse+CDTでデバッグができない
Eclipse+CDT+CygwinでCの開発環境を作っているのですが、デバッグをすると 下記のエラーがでます。 Can't find a source file at "/cygdrive/d/EclipseWorkSpace/test/test.cpp" Locate the file or edit the source lookup path to include its location. いろいろ調べた結果CygwinのGdbパスを設定しなければいけないということで、 http://72.14.235.104/search?q=cache:CGiIU38IrqAJ:www.ep.sci.hokudai.ac.jp/~kk/tips/windows.html+CDT+%E3%83%87%E3%83%90%E3%83%83%E3%82%B0+%22%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%22&hl=ja&ct=cln ここを参考に設定したものの、やっぱりできません。 もうわけがわかりません。誰か助けてー(;;)
- 親クラスのフリをした子クラスの使い方を教えて下さい
以前、QNo.3479089でお世話になった者です。類似というか、続きの質問です。 ClassAを継承するClassBがあり、条件によって、ClassAまたはClassBをインスタンス化して使います。 (ClassBは、ClassAのメソッドの一部をオーバーライドして、ClassB固有のメソッドも追加しています) ClassA* pObj = NULL; if( ある条件 ) { pObj = new ClassA(); } else( その他の条件 ) { pObj = new ClassB(); } pObj->common_method(); これが常套手段と伺ったのですが、ClassBがインスタンス化された場合、ClassB固有のメソッドmethodBを呼び出そうとすると、「ClassAにはmethodBが存在しない」といったようなコンパイルエラーが出ます。 pObj->methodB(); // ここで、エラー それで、エラーを解消するために、「その他の条件」の時に、dynamic_castを使ってみました。 if( その他の条件 ) { ClassB* pObj2 = dynamic_cast<ClassB*>( pObj ); pObj2->methodB(); } 上記でコンパイルエラーは解消したのですが、なにか、非常にめんどくさいです。 また、ClassAのフリをした実体ClassBを使っているのだから、オーバーライドしているメソッドもdynamic_castをしないと呼び出されないような気がします。 結局、親のフリした子クラスを作成する場合、こんなにめんどくさいことをしないといけないのでしょうか? それともこのやり方はおかしいですか? この場合、どういうふうにするものなのか、教えて下さい。よろしくお願いします。
- c言語のプログラムにMATLABを入れたい
CプログラムからのMATLABの呼び出しを行いたいのですが その環境設定の方法が http://dl.cybernet.co.jp/matlab/support/manual/r14/toolbox/matlab/matlab_external/?/matlab/support/manual/r14/toolbox/matlab/matlab_external/ch_c_mex.shtml 上記ページに書かれているのですが icudt24b.dat,or icudt24l.datがないので手に入れたく探したのですが 見当たらないので入手先をご存知の方がいたら教えていただきたいのと 自分のシステムがbig-endian、little-endianのどちらのシステムか判別する方法を教えて頂きたいです。
- c言語のプログラムにMATLABを入れたい
CプログラムからのMATLABの呼び出しを行いたいのですが その環境設定の方法が http://dl.cybernet.co.jp/matlab/support/manual/r14/toolbox/matlab/matlab_external/?/matlab/support/manual/r14/toolbox/matlab/matlab_external/ch_c_mex.shtml 上記ページに書かれているのですが icudt24b.dat,or icudt24l.datがないので手に入れたく探したのですが 見当たらないので入手先をご存知の方がいたら教えていただきたいのと 自分のシステムがbig-endian、little-endianのどちらのシステムか判別する方法を教えて頂きたいです。
- C言語の質問です。
下記のコードでコンパイルすると成功しますが、実行時にエラーになります。 #include <stdio.h> int series(void); int main(void) { int i; for(i=0; i<10; i++) printf("%d ", series()); return 0; } /* これは正しくない */ int series(void) { int total; total = (total + 1423) % 1422; return total; } 解説には『ローカル変数の値はその関数が呼び出されている間だけ保持されます。 このプログラムはseries()関数を使ってある数列を作ろうとしていますが、 数列のそれぞれの数値を計算するのに1つ前の数値を使おうとしています。 しかし、変数totalの値はseries()の各関数呼び出しをまたがって保持される ことはないため、意図したとおりには動いてくれません。』とあります。 ローカル変数がその関数が呼び出されている間だけ保持されるのはわかりますが、 そのあとの解説の意味がわかりません。 どなたか詳しく解説していただけないでしょうか?お願いします!!