目的
次のような行列があると想像してください
a11 a12 a13
a21 a22 a23
a31 a32 a33
私がやりたいことは、テキストボックスの値からこの行列を回転させて、たとえば 2 と書いて を押すrotateと、プログラムは行列の両方の対角値 (この場合は a11、a22、a33、a13、a31) を保持し、2 を回転させる必要があります。他の値を時計回りに回します。したがって、結果は次のようになります
a11 a32 a13
a23 a22 a21
a31 a12 a33
すべてのN x N
サイズのマトリックスで機能する必要があり、ご覧のとおり、4回転ごとにマトリックスがデフォルト状態になります。
私がしたこと
アイデアはそのようなもので、2つのフォームがあります。最初に行列のサイズを取得します (1 値、たとえば 5 の場合、5x5 行列を生成します)。押すOKと、そのような2番目のフォームテキストボックスマトリックスが生成されます
フォーム 1 コード
private void button1_Click(object sender, EventArgs e)
{
int matrixSize;
matrixSize = int.Parse(textBox1.Text);
Form2 form2 = new Form2(matrixSize);
form2.Width = matrixSize * 50 + 100;
form2.Height = matrixSize *60 + 200;
form2.Show();
//this.Hide();
}
フォーム 2 コードは、指定された値からテキスト ボックス マトリックスを生成し、ランダムな値をこのフィールドに入れます。
public Form2(int matrSize)
{
int counter = 0;
InitializeComponent();
TextBox[] MatrixNodes = new TextBox[matrSize*matrSize];
Random r = new Random();
for (int i = 1; i <= matrSize; i++)
{
for (int j = 1; j <= matrSize; j++)
{
var tb = new TextBox();
int num = r.Next(1, 1000);
MatrixNodes[counter] = tb;
tb.Name = string.Format("Node_{0}{1}", i, j);
Debug.Write(string.Format("Node_{0}{1}", i, j));
tb.Text = num.ToString();
tb.Location = new Point(j * 50, i * 50);
tb.Width = 30;
tb.Visible = true;
this.splitContainer1.Panel2.Controls.Add(tb);
counter++;
}
}
}
フォーム 2 には、回転を制御するためのテキスト ボックスが 1 つあります (その他のテキスト ボックスは、プログラムによってオンザフライで生成されます)。私がしたいのは、回転カウントを入力Enterしてこのテキストボックスを押すと、上記で説明したようにテキストボックスマトリックスを回転させたいということです。方法がわかりません。