Affine.Rotate C# (CSharp) Method

Rotate() public method

public Rotate ( float angle, float x0, float y0 ) : bool
angle float
x0 float
y0 float
return bool
	public bool Rotate(float angle, float x0, float y0)
	{
		XFORM xm = new XFORM();

		Translate(-x0, -y0);	// make (x0,y0) the origin

		double rad = angle * (3.14159265359 / 180);

		xm.eM11 = (float)Math.Cos(rad);
		xm.eM12 = (float)Math.Sin(rad);
		xm.eM21 = -xm.eM12;
		xm.eM22 = xm.eM11;
		xm.eDx = 0;
		xm.eDy = 0;

		Combine(xm);			// rotate
		Translate(x0, y0);		// move origin back

		return true;
	}

Usage Example

Example #1
0
        public override void Draw(OpenGLControl glControl)
        {
            //Prepare data
            long x2 = tmpX2;
            long y2 = tmpY2;

            p = 5 / 4 - radius;

            start = new Point(0, radius);

            base.Draw(glControl);
            int k  = 0;
            var gl = glControl.OpenGL;

            gl.PushMatrix();
            Affine.Rotate(center, gocXoay, glControl.OpenGL);
            gl.PointSize(thickness);
            gl.Begin(OpenGL.GL_POINTS);
            while (true)
            {
                if (start.X > start.Y)
                {
                    //Khi vẽ xong hình tròn
                    gl.End();
                    gl.Flush();
                    if (veDdk == true)
                    {
                        DrawControlPoint(glControl);
                    }
                    gl.PopMatrix();
                    return;
                }
                //Vẽ điểm cũ,  và 7 điểm đối xứng của nó
                gl.Vertex(center.X - start.X, glControl.Height - (center.Y - start.Y));
                gl.Vertex(center.X + start.X, glControl.Height - (center.Y + start.Y));
                gl.Vertex(center.X - start.X, glControl.Height - (center.Y + start.Y));
                gl.Vertex(center.X + start.X, glControl.Height - (center.Y - start.Y));
                gl.Vertex(center.X + start.Y, glControl.Height - (center.Y + start.X));
                gl.Vertex(center.X - start.Y, glControl.Height - (center.Y + start.X));
                gl.Vertex(center.X + start.Y, glControl.Height - (center.Y - start.X));
                gl.Vertex(center.X - start.Y, glControl.Height - (center.Y - start.X));
                start.X++;
                x2 = x2 + 2;
                if (p < 0)
                {
                    p = p + x2 + 1;
                }
                else
                {
                    start.Y--;
                    y2 = y2 - 2;
                    p  = p + x2 - y2 + 1;
                }
                k++;
            }
        }
All Usage Examples Of Affine::Rotate