色の重み付けのあるグラフ表示 – プログラミング – Home

色の重み付けのあるグラフ表示
 
通知
すべてクリア

[解決済] 色の重み付けのあるグラフ表示


さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
Topic starter  

環境:WinXp(SP2) VC++.net2005 MFC

500個程度のデータを読み込み、値をXY座標上にプロットし(データ間は直線で結
ぶ)、データの分布を確認するアプリを作っています。

プロットする点(小さい塗り潰し円)を暗い色にし、他の点と重なった部分は、
重なった回数によって明るい色にするような処理は可能なのでしょうか? 
データ間を結ぶ直線も同様に可能でしょうか?

例えば、基本はRGB(1,1,1)の色にして、他と重なった部分はRGB(2,2,2)、
更に重なればRGB(3,3,3)で、最も重なった所は、RGB(255,255,255)で表示する。

要するに、分布が集中している所は明るい色で、分散している所は暗い色で表示したい。
出来そうであれば、ヒントでも構いませんので、お教え願います。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

できます。
どうやって実現するかも明らか。
ヒストグラム(度数分布表)を作れば解決。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

できるのは間違いないけど、仕様によっては苦労するかも。

小さい塗り潰し円は、ベン図のように重なりますか?
直線の色は?

円は離散的で、2つの円はぴったり重なるか、全く重ならないかの
どちらかの状態しかないならば、επιστημη さんの方法で
比較的簡単に作れるでしょう。

そうでないなら(ベン図のように重なるならば)、
CRgnを使ったラスターオペレーションがいいかな、とも思うけど、
最も重なった部分を特定の色で表示したいなら、
最後に、色の補正をしないといけないみたい。


返信引用
さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
Topic starter  

お返事ありがとうございます。

小さい塗り潰し円は、ベン図のように重なります。
直線の色は、小さい塗り潰し円と同じです。(色は何でもOK)

円の重なる程度によって、色の明暗を256段階で変えようと考えましたが、
複雑に重なり合うので、やはり難しそうですね。

2次元のグラフを、3次元的に表現できたらいいなって思ったのですが・・・。
どうするか、もう少し考えてみます。


返信引用
三草
 三草
(@三草)
ゲスト
結合: 19年前
投稿: 56
 

ドットレベルで考えるのはどうでしょう、ゴリ押しですが、、、
よく考えれば、もっといいアルゴリズムがあるかもしれません。
# 起点(0,0座標)は考慮してません

----------------------------------------

#define MAX_X 512 // グラフの最大X座標
#define MAX_Y 512 // グラフの最大Y座標

void SetDataToColorLevel( ・・・ ){
// ドットのカラーレベル
int ColorLevel[MAX_X][MAX_Y] = { 0 };

// 塗りつぶし円の座標(内接円)、とりあえずRECT構造体で表現、、、
RECT rect;

// データ件数分ループ
for( ・・・ ){
// データを1件読込み、座標をrectへ格納
・・・

// rect内接円のColorLevelを上げる
POINT SerchPoint;
for( int i = rect.left; i < rect.right; i++ ){
for( int j = rect.top; j < rect.buttom; j++ ){
SerchPoint.x = i;
SerchPoint.y = j;
if( IsOnCircle( rect, SerchPoint ) ){
// SerchPointが円上にあれば、
// 対応する座標のColorLevelを上げる
ColorLevel[i][j]++;
}
}
}
}

// あとはColorLevelに従い、色を指定した点を描画していく
・・・

}

// point が rectに内接する円の上にあるか調査する
// あればTrue、なければFalse を返却
bool IsOnCircle( RECT rect, POINT point ){
// ここが一番めんどくさいかも
・・・
}


返信引用
さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
Topic starter  

お返事ありがとうございます。

確かにドットレベルで考えるのが良いかも知れませんね。
分かり易いソースも書いて頂き感謝です。

この方法で考えてみます。


返信引用
さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
Topic starter  

ドットレベルで考えて、何とか出来たのですが、
処理時間が長くなり過ぎてしまいました。

いろいろ調べて、GDI+を使ってみたら簡単に出来ました。

ありがとうございました。^^


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました