読者です 読者をやめる 読者になる 読者になる

峠をひとつ

C#で、楽譜認識をするための五線譜認識をしている。
これに一年かかっている。
つらい。

今日は、夏休みから 科教協の旅行までの間にずっと悩んでいたところのうちの
ひとつを解決できた。旅行中まで、考え込んでいた。
一ヶ月半かかった。本当に今年度の修了は無理そうな気配。
でも、とにかく、今はうれしい。

下にコードを記述しよう。

		//条件2を満たした直線のみ線を見せる。
			//このとき、pk[k][XX]のXは、一番上の候補が無視されてかまわない。そもそもこの関数にくるときは、
			//iやjは、!=0のときしかこないからである。
			/*for ( int iCounter = (int)_GlobalConst.iVerticalCandidateAry[k-1]; iCounter < (int)_GlobalConst.iVerticalCandidateAry[k]; iCounter++ ) {
				y = (int)((double)_GlobalConst.Pk[k][i] + grad*(double)iCounter);
				if (iCounter >= 0 && iCounter < img.Width && y >= 0 && y < img.Height ) {
					if ( isCondition2 == true){
						//条件2に適合した線
						//img.setPixel(iCounter, y, Color.Red);
						//g.DrawLine(new Pen(Color.Blue), iCounter, y, iCounter+5, y+5);
					}
				}
				;				
			}
*/
			double tempY;
			for( int iCounter = (int)_GlobalConst.iVerticalCandidateAry[k-1]; iCounter < (int)_GlobalConst.iVerticalCandidateAry[k];iCounter++ ) {
				y = (int)((double)_GlobalConst.Pk[k][i] + grad*(double)iCounter);
				if ( iCounter >= 0 && iCounter < img.Width && y >= 0 && y < img.Height ) {
					if( isCondition2 == true){
						pLog.WriteLine("k-1={0}, i={1}, pk[k-1][i]={2}, pk[k+1][j]={3}", k - 1, i, _GlobalConst.Pk[k][i], _GlobalConst.Pk[k + 1][j]);
						//img.setPixel(iCounter, y, Color.Red);
						tempY = _GlobalConst.Pk[k][i] + grad * (int)_GlobalConst.iVerticalCandidateAry[k];
						g.DrawLine( new Pen( Color.Red ),
							(int)_GlobalConst.iVerticalCandidateAry[k-1],
							(int)_GlobalConst.Pk[k][i],
							(int)_GlobalConst.iVerticalCandidateAry[k],
							//(int)_GlobalConst.Pk[k+1][j]
							(int)tempY
						);
					}
				}
			}