c# 中画正弦曲线问题

vivianfdlpw 2004-05-02 10:48:16
利用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;


}
...全文
1070 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vivianfdlpw 2004-05-03
  • 打赏
  • 举报
回复
汗。。。我真傻,看了几遍没看见这个重载方法。。。
elusion 2004-05-02
  • 打赏
  • 举报
回复
什么意思啊
不能这样么 g.DrawEllipse (redPen,(float)x,(float)y,0.1f,0.1f);
cuike519 2004-05-02
  • 打赏
  • 举报
回复
作图我不熟悉所以不敢乱说,下面这个例子也许对你有所帮助!
http://www.codeproject.com/csharp/ZedGraph.asp
vivianfdlpw 2004-05-02
  • 打赏
  • 举报
回复
关键是g.DrawEllipse (redPen,(float)x,(float)y,1,1)这句
新的坐标中X轴的长度大约6.28,可是这个椭圆的宽度就已经是1了,
画出来非常大,我需要的是椭圆相对于坐标来说是一个点

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧