グラフの線が描かれる順序は重要ですか?
特定のしきい値を持つポイントを配列/ベクトルに記録して比較できます。
手っ取り早い方法は、2 つのバイナリ (モノクロ、白黒のみ) 画像を使用することです。
- 1 つの画像は、グラフの「印刷画面」( BitmapData.draw() ) になります (例: 白地に黒)
- もう 1 つのイメージは、ユーザー/生徒が描画する (マウスが押されている間) 黒のピクセルを書き込むために使用する白 (空白) の BitmapData になります。
例えば
userBitmapData.setPixel(mouseX,mouseY,0x000000);
描画が完了したら (マウスを放すか、設定したルールを選択)、ソース (元のグラフ) 画像の黒いピクセルがどれだけ宛先 (ユーザー グラフ) 画像に一致するかをチェックする関数を実行します。
差分モードでブレンドされた他の 2 つのビットマップを含む BitmapData を作成して、黒でないものはすべて一致しないようにするか、すべてのピクセルを 1 回ループして、ピクセルが一致するかどうかを手動で確認します。これは、2 つの画像の寸法 (幅、高さ) が同じであるという事実に依存していることに注意してください。
これを説明するためのコードを次に示します。
function compare(source:BitmapData,destination:BitmapData,threshold:Number):Boolean{
var commonPixels:Number = 0, totalPixels:Number = 0;
for(var j:int = 0 ; j < source.height ; j++){
for(var i:int = 0 ; i < source.width; i++){
pixels++;
if(source.getPixel(i,j) == destination.getPixel(i,j)) commonPixels++;
}
}
trace('matching: ' + (commonPixels/pixels * 100) + ' % ');//delete this line,just testing
if(commonPixels/pixels >= threshold) return true;
else return false;
}
//usage:
trace('is the graph correct ?: ' + compare(graphBitmapData,userBitmapData,0.7));
ベクトル/配列バージョンも同様ですが、視覚的な手がかりはありません。セットアップに応じて、どちらが最適かをテストすることをお勧めします。BitmapData は配列よりも多くのメモリを必要としますが、Bitmap を簡単に作成して表示リストに追加し、正しく表示されるかどうかを確認することができます。
速度が問題になる場合:
HTH