- - PR -
2次元配列をプロパティに使用したい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-04-08 15:20
的を外した答えですいませんでした。 参考迄に VS2008 C# ですが、下記のコードではおっしゃられているエラーが発生しましたが、 System.ComponentModel.DesignerSerializationVisibility 属性指定箇所のコメントアウトを外すとエラーが出ませんでした。
| ||||||||
|
投稿日時: 2009-04-08 15:44
>お ださん
「DesignerSerializationVisibility.Hidden」でエラーは出なくなりました。 コード ジェネレータがオブジェクトのコードを生成しないと言うのは、 まさしく私の求めていた方法です。 先ほど私が試してダメだったのは、シリアル化して保存しようとしていたためです。 じゃんぬねっとさん、お ださん、アドバイスありがとうございます。 | ||||||||
|
投稿日時: 2009-04-09 22:19
ん。。。ごめんなさい、両方の投稿をあわせてみても、はやり、なぜ2次元配列なのか、解らないです。 今必要なのは、「高度というキーから、座標という複数の値が取り出せること」ではないでしょうか?つまり、座標に対する高度ではなく、高度に対する座標群が、求められなければならないのではないでしょうか。もちろん座標から高度を求めることが必要なときもありますが、その時は、その座標に近い複数の観測されている座標の高度から、計算によって高度を求めることになるのではないでしょうか。 KT工房さんの考えでいくと、1km×1km の地域を、1m 単位で値を持とうとすると、1000×1000個の容器が必要になります。はたして、等高線を引くのに、それだけの容器が必要でしょうか?そして、その配列から等高線を引くためにある値を持った“一連の座標値”を求めるのは、まず不可能です。 なぜ不可能なのか。凸型の土地なら、辺が交差しないようにソートすることで線を描くことができます。では、凸凸、つまりこぶがふたつあったらどうしましょう?同じ高さの地域がふたつあるわけです。このふたつの地域が切れていることを、座標値という情報だけから、どうやって導き出すのでしょう?あるいは、こう言うこともできるでしょう。KT工房さんがなさろうとしているのは、ビットマップを作る方法です。でも本当に必要なのは、ベクトル図を作る方法ではないでしょうか。 ということを考えると、ここで必要な情報は、標高と、座標のリストではないでしょうか。 [code] class PositionList { PositionList NextPosition; double X; double Y; } class ContourLine { double Altitude; PositionList Positions; // Position[] Positions; // List<Position> Positions; } ContourLine の1次元配列をプロパティに または Dictionary<double, List<Position>> contourLine; [code] | ||||||||
|
投稿日時: 2009-04-10 18:18
>Jittaさん
確かにJittaさんのおっしゃられている通り、 等高線を引くのであれば値から座標位置を求めなければダメです。 ですが、ある点から全方位(360度)のどの方向へ線を引くかを求める方法が 私には難しくてできませんでした。 仕様的には分布図?のようなものが見えればOKとのことでしたので、 簡潔にするため網目を細かく切って、間の値を線形補完で埋めてビットマップの原理で表現することにしました。 私の技術ではここまでが限界でした・・・(泣) もしできるならば教えて欲しいぐらいです、すみません。 | ||||||||
|
投稿日時: 2009-04-15 22:04
済みません、返答したつもりでいました。
教えられることは、お教えしますよ。でも、この文は、ちょっと意味がわかりません。 「どの方向へ線を引く」とは、どういうことをイメージされているのでしょう?「何処と何処が同じ高さ」ということは、わかっていますよね。それはつまり、「何処と何処を線で結べ」であって、「どの方向へ線を引く」ではないと思います。 例えば、標高100メートルの座標として、次の座標列が与えられたとします。 (100, 200) (150, 220) (160, 240) (140, 240) (120, 220) これは、線が重ならないように並んでいます。この場合、上から1番目と2番目、2番目と3番目、・・・5番目と1番目を結べば、5角形になります。滑らかにするには、補間方法はいろいろあるのですが、単純には用意されている補間曲線を描くメソッドを使えばいいです(方法 : フォームに曲線を描画する<microsoft.com>にある、最後の Bezier spline か、canonical spline を使う)。 与えられた座標列が、重ならないように並んでいるかどうかわからないときは、重ならないように並べます。順番に並んでいると仮定し、1点目から2点目を固定、線1-2と線1-3の間の角、線1-2と線1-4の間の角・・・を求め、それぞれ大きくなっていけば、重ならないように並んでいるのではないでしょうか(図を描いてみるとわかると思います)。角度が180度を超えたら、固定していると決めた点が間違っていることになります。角度の求め方は、ここに書いてある式<casio.jp>が、分かり易いと思います。 私が最初に配属された部署での上司は、私によく「漫画を描け」と言いました。これは、「頭だけでなく、手も使って考えろ」ということです。手を動かすことで頭を刺激しますから、画面を眺めているだけでなく、図を描いてみることを勧めます。 | ||||||||
|
投稿日時: 2009-04-16 07:45
↑
ダメだ 凹型の場合を考慮してない |