c# 中画正弦曲线问题
利用Graphics和Pen的ScaleTransform方法把坐标长度转换了一下,实现了在新的坐标下pen(画笔)的宽度与新坐标符合,但是DrawElipse没有相应的转换方法,这
导致画出来的椭圆非常大,而不是小到一个点,难看之极。
有什么解决办法吗?
public void DrawPicture(System.Windows .Forms .PictureBox pb)
{
System.Drawing .Bitmap bmp=new Bitmap (pb.Width ,pb.Height );
Image img=(Image)bmp;
System.Drawing .Graphics g=Graphics.FromImage (img);
//定义坐标
int MaxY=pb.Height; //最大Y坐标
int MaxX=pb.Width ; //最大X坐标
int OX=0; //原点X坐标
int OY=0; //原点Y坐标
int NewOX=50; //新坐标原点X
int NewOY=MaxY/2; //新坐标原点Y
//定义画笔
Pen pen=new Pen (Color.Blue,1);
//画坐标线
//g.ScaleTransform (20,20,System.Drawing .Drawing2D .MatrixOrder .Append );
g.TranslateTransform (NewOX,NewOY);//平移坐标系
float CurveX=(float)(2*System.Math .PI)+1 ; //新的坐标最大值
float CurveY=11; //新的坐标最大值
float scaleX=2*CurveX/MaxX; //X方向缩放比例
float scaleY=2*CurveY/MaxY; //Y方向缩放比例
g.ScaleTransform (1/scaleX,1/scaleY); //变换坐标
pen.ScaleTransform (scaleX,scaleY); //变换pen坐标
MaxX=(int)(2*CurveX);
MaxY=(int)(2*CurveY);
int XLeft=-1; //X轴左端点
int XRight=MaxX; //X轴右端点
int XY=OY; //X轴Y坐标
int YTop=-MaxY/2; //Y轴上端点
int YBottom=MaxY/2; //Y轴下端点
int YX=OX; //Y轴X坐标
g.DrawLine (pen,new Point (XLeft,XY),new Point (XRight,XY));//X轴
g.DrawLine (pen,new Point (YX,YTop),new Point (YX,YBottom));//Y轴
g.DrawEllipse (pen,0,0,1,1);//画原点
double x;
double y;
Pen redPen=new Pen (Color.Red ,1);
redPen.ScaleTransform (scaleX,scaleY); //变换pen坐标
for(double i=0;i<=2*Math.PI ;i=i+0.01) //循环画正弦曲线
{
x=i;
y=this._A *Math.Sin ((this._N )*x);
g.DrawEllipse (redPen,(float)x,(float)y,1,1);
}
//为pb赋值
pb.Image =img;
}