C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 4点の座標位置をおぼえるにはどうしています?


(過去ログ 132 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■77695 / inTopicNo.1)  4点の座標位置をおぼえるにはどうしています?
  
□投稿者/ ミルク (11回)-(2015/11/17(Tue) 12:45:04)

分類:[.NET 全般] 

2015/11/17(Tue) 12:46:33 編集(投稿者)

環境 c# .net Windows7

C#で Rectangle があり、それぞれ Left, Top, Right, Bottom があるので
使おうと思いましたが、

Width, Height でしか設定できないみたいです。

Rectangle ra = new Rectangle(Left, Top, Width, Height);

Rectangle ra = new Rectangle(); を行って
ra.Left, ra.Top, ra.Right, ra.Bottom を代入しようとしたけど読取専用になっています。

結局
Rectangle ra = new Rectangle(left, top, right - left + 1, bottom - top + 1);
にして使うしか手はないのでしょうか?

または、別の構造体を作成するとか?
class RectAngle
{
 public int Left;
 public int Top;
 public int Right;
 public int Bottom;

 public void RectAngle(int l, int t, int r, int b)
 {
  Left = l;
  Top = t;
  Right = r;
  Bottom = b;  
 }
}

皆さんはどうしていますか?
引用返信 編集キー/
■77696 / inTopicNo.2)  Re[1]: 4点の座標位置をおぼえるにはどうしています?
□投稿者/ ミルク (12回)-(2015/11/17(Tue) 12:52:35)
間違っていますね

Rectangle ra = new Rectangle(left, top, right - left + 1, bottom - top + 1);
ではなくて
Rectangle ra = new Rectangle(left, top, right - left, bottom - top);
ですね。

このあたり訳が分からなくなるので
やっぱり、別の構造体を作った方がいいのかな
引用返信 編集キー/
■77697 / inTopicNo.3)  Re[1]: 4点の座標位置をおぼえるにはどうしています?
□投稿者/ Hongliang (369回)-(2015/11/17(Tue) 12:54:55)
2015/11/17(Tue) 12:55:47 編集(投稿者)

Rectangleは訳すと長方形なので。傾きは別の方法で表現するのが画像処理ライブラリとしては一般的かと思いますし。
任意の4頂点を持つ四角形が必要なら、Tetragonとか言う名前で自前構造体でも定義するでしょうね。
引用返信 編集キー/
■77698 / inTopicNo.4)  Re[2]: 4点の座標位置をおぼえるにはどうしています?
□投稿者/ トロロ0930 (3回)-(2015/11/17(Tue) 13:07:49)
Left, Top, Right, Bottomで矩形を定義・利用するのであれば、やっぱり

new Rectangle(left, top, right - left, bottom - top);

が行えるような共用メソッドを用意するのが一番ですね。

引用返信 編集キー/
■77699 / inTopicNo.5)  Re[1]: 4点の座標位置をおぼえるにはどうしています?
□投稿者/ 魔界の仮面弁士 (558回)-(2015/11/17(Tue) 13:10:27)
No77695 (ミルク さん) に返信
> C#で
全角の C# (U+FF23, U+FF03) ではなく、
半角の C# (U+0043, U+0023) が正しい記述です。

JIS 規格(JIS X 3015) および、その元になった
国際標準規格(ISO/IEC 23270)で定義されていたりします。


> Rectangle があり、それぞれ Left, Top, Right, Bottom があるので
> 使おうと思いましたが、Width, Height でしか設定できないみたいです。

Rectangle.FromLTRB メソッドがありますよ。
引用返信 編集キー/
■77700 / inTopicNo.6)  Re[2]: 4点の座標位置をおぼえるにはどうしています?
□投稿者/ トロロ0930 (4回)-(2015/11/17(Tue) 13:18:50)
> Rectangle.FromLTRB メソッドがありますよ。

すでにあったのですね。失礼しました。
私は質問者ではないのですが、私も勉強になりました。
引用返信 編集キー/
■77703 / inTopicNo.7)  Re[2]: 4点の座標位置をおぼえるにはどうしています?
□投稿者/ ミルク (13回)-(2015/11/17(Tue) 16:38:24)
No77699 (魔界の仮面弁士 さん) に返信

> Rectangle.FromLTRB メソッドがありますよ。

ありがとうございます。
あったんですね。コンストラクタで設定できなかったからないものだとばかり思ってました。

でも、Rectangle を使用して、 Width Height は 1 少なくなるんですよね。
ただ単に座標の位置保存にとどまり、Width, Height は使わない方が無難ですね。

たとえば 点(2, 3), 点(6, 12) の位置を保存するのに
Rectangle ra = Rectangle.FromLTRB(2, 3, 6, 12);
としておいて、

面積を求める場合
ra.width * ra.Height = 36 になるんですけど
本当は (6 - 2 + 1) × (12 -3 + 1) = 50 なんですよね。







引用返信 編集キー/
■77704 / inTopicNo.8)  Re[3]: 4点の座標位置をおぼえるにはどうしています?
□投稿者/ Azulean (539回)-(2015/11/17(Tue) 17:26:35)
2015/11/17(Tue) 17:39:44 編集(投稿者)

No77703 (ミルク さん) に返信
> 面積を求める場合
> ra.width * ra.Height = 36 になるんですけど
> 本当は (6 - 2 + 1) × (12 -3 + 1) = 50 なんですよね。

そのように「終点を含める」という定義が必要なのであれば、Rectangle は使わないようにしてください。
Rectangle は「終点を含まない」という定義であるため。


たとえば、2 点 (0, 0) - (1, 1) で構成される矩形(長方形)と考える場合、Rectangle は以下の■の範囲を矩形として扱います。
(■や□は 1px を表す「ドット」を表現している)

■□
□□

ミルクさんはこうではなく、以下のように扱いたいということですよね?

■■
■■

これは定義(前提、どうあるべきか?)という出発点が違うので、どちらかが正解と言い切れるものではありません。
(ただし、Windows では終点を含めない矩形を表すことがほとんどであるということを理解しておかないと、今後の Windows プログラミングで混乱を招くことになります)

-----
そういう型が必要なのであれば、2 つの Point を持つ独自クラスを作っておいた方が無難だとは思います。
「2 点」が必要なので、int 型でばらして持っておく必要はないと考えられるため。
引用返信 編集キー/
■77707 / inTopicNo.9)  Re[2]: 4点の座標位置をおぼえるにはどうしています?
□投稿者/ furu (35回)-(2015/11/17(Tue) 18:31:56)
No77699 (魔界の仮面弁士 さん) に返信
> ■No77695 (ミルク さん) に返信
>>C#で
> 全角の C# (U+FF23, U+FF03) ではなく、
> 半角の C# (U+0043, U+0023) が正しい記述です。
>
> JIS 規格(JIS X 3015) および、その元になった
> 国際標準規格(ISO/IEC 23270)で定義されていたりします。
>
魔界の仮面弁士 さん
本題からはそれますが気になるので書きます。

私も意識せず、全角でC#と書いてしまいます。
しかし、小文字を使われると、気になります。

手元にあるJIS X 3015:2008では、
C#の書き方が書いてある「6 頭字語及び略語」の最初に
「箇条6は、参考であって、既定ではない」と記載されています。

厳格に決まっていることはないようなので
このような掲示板では全角でも許してあげて
いいんではないでしょうか?
引用返信 編集キー/
■77812 / inTopicNo.10)  Re[3]: 4点の座標位置をおぼえるにはどうしています?
□投稿者/ ミルク (14回)-(2015/11/24(Tue) 09:06:14)
みなさんどうもありがとうございました。

>環境 c# .net Windows7
>C#で Rectangle があり、それぞれ Left, Top, Right, …

意識していなかったので、前後の文章入力の状態で
大文字になったり小文字になったりしています。
自動変換してくれればいいんですけど。

知識として、C#ではなくc# が正しいと認識しました。






解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -