private void RotatePointButton_Click(object sender, EventArgs e) { ModelView.Image = new Bitmap(ModelView.Width, ModelView.Height); Graphics g = Graphics.FromImage(ModelView.Image); DrawAxisAndGrid(); double angle = Convert.ToInt32(RtPtAng.Text) * Math.PI / 180; int x = Convert.ToInt32(RtPtX.Text); int y = Convert.ToInt32(RtPtY.Text); Types.Matrix matrix = new Types.Matrix(1, 0, 0, 0, 1, 0, -x, -y, 1); matrix = matrix.Multiple(new Types.Matrix(Math.Cos(angle), Math.Sin(angle), 0, -Math.Sin(angle), Math.Cos(angle), 0, 0, 0, 1)); matrix = matrix.Multiple(new Types.Matrix(1, 0, 0, 0, 1, 0, x, y, 1)); drawing.Transform(matrix); drawing.Draw(g); curve.Transform(matrix); curve.Draw(g); ModelView.Refresh(); }
public void Transform(Matrix T) { bool xneg, yneg; Matrix rez; for (int i = 0; i < lines.Count; i++) { xneg = false; yneg = false; lines[i].start.X -= _x; lines[i].start.Y -= _y; lines[i].end.X -= _x; lines[i].end.Y -= _y; //if (lines[i].end.X < 0) //{ // lines[i].end.X = Math.Abs(lines[i].end.X); // xneg = true; //} //if (lines[i].end.Y < 0) //{ // lines[i].end.Y = Math.Abs(lines[i].end.Y); // yneg = true; //} rez = new Matrix(lines[i].end.X, lines[i].end.Y, lines[i].we); rez = rez.Multiple(T); lines[i].we = (int)(rez.matrix[0, 2]); lines[i].end.X = (int)(rez.matrix[0, 0] / lines[i].we); lines[i].end.Y = (int)(rez.matrix[0, 1] / lines[i].we); //if (xneg) //{ // lines[i].end.X = Convert.ToInt32(("-" + lines[i].end.X.ToString())); // xneg = false; //} //if (yneg) //{ // lines[i].end.Y = Convert.ToInt32(("-" + lines[i].end.Y.ToString())); // yneg = false; //} //if (lines[i].start.X < 0) //{ // lines[i].start.X = Math.Abs(lines[i].start.X); // xneg = true; //} //if (lines[i].start.Y < 0) //{ // lines[i].start.Y = Math.Abs(lines[i].start.Y); // yneg = true; //} rez = new Matrix(lines[i].start.X, lines[i].start.Y, lines[i].ws); rez = rez.Multiple(T); lines[i].ws = (int)(rez.matrix[0, 2]); lines[i].start.X = (int)(rez.matrix[0, 0] / lines[i].ws); lines[i].start.Y = (int)(rez.matrix[0, 1] / lines[i].ws); //if (xneg) //{ // lines[i].start.X = Convert.ToInt32(("-" + lines[i].start.X.ToString())); // xneg = false; //} //if (yneg) //{ // lines[i].start.Y = Convert.ToInt32(("-" + lines[i].start.Y.ToString())); // yneg = false; //} lines[i].start.X += _x; lines[i].start.Y += _y; lines[i].end.X += _x; lines[i].end.Y += _y; } }