7

私は、C#/ WPFを使用して、医療データ用のデータシリーズビューアプログラムを設計しています(プログラミングではありません)。データを表示するメインパネルが1つあり、一般的なマウスのパン/ズーム機能(左ドラッグによるパン、スクロールによる水平ズーム、ダブルクリックによる垂直自動調整、右ドラッグによる選択)があります。

問題は次のとおりです。オーディオ編集(goldwave、audacity)、地図作成(gpsTrackmaker)、イラスト(photoshop、inkscape)プログラムで見られるものと同様に、左上に定規がある垂直および水平グリッドが必要です。さらに、これらの定規は、ほとんどのプロットAPI(Matlab、GNUPlot、Matplotlib)、さらにはオフィスプログラム(Excel、Calc)でも構成可能です。

主な必要条件は、常にコンテンツに合わせて拡大縮小されることに加えて、ラベルが互いに「ぶつかる」または隠れることなく、可能な限り最大の粒度で目盛りラベルのみを描画する「アンチクラッター」アルゴリズムを持つことです。

以下は、Inkscape上の同じ図面の2つのズームレベルを示す画像です。最初の行には、100個のラベルが表示されます。2行目は、各10年のラベルを示しています。

質問は次のとおりです。「これ(表示ルーラーの自動解決)は多くのプログラムで解決された問題のようです。どのように検索すればよいですか/利用可能なリソース/チュートリアルは何ですか?適切なコントロールを指定して実装できます私のニーズは?」

できればC#での提案や例をいただければ幸いですが、どの言語でもかまいません。

ここに画像の説明を入力してください

4

1 に答える 1

6
  • W=定規の目に見える部分
  • X = Wで表される範囲(右左)
  • w=ラベル幅

n = W/w(表示できるラベルの最大数)

x = X*w/W(2つのラベル間の最小範囲)

次に、xを任意の大きさのより大きく、より涼しい値1、2、または5に丸める必要があります。

例えば

  • x=18.4=>x1=20
  • x=539=>x1=1000

w1 = x1/X*W(ラベルの幅、または目盛り間のスペース)

n1 = W/w1(ティック数)

于 2012-09-06T10:19:20.477 に答える