CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

c# 中画正弦曲线问题

楼主vivianfdlpw()2004-05-02 22:48:16 在 .NET技术 / 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;  
   
   
  } 问题点数:100、回复次数:4Top

1 楼vivianfdlpw()回复于 2004-05-02 22:50:49 得分 0

关键是g.DrawEllipse   (redPen,(float)x,(float)y,1,1)这句  
  新的坐标中X轴的长度大约6.28,可是这个椭圆的宽度就已经是1了,  
  画出来非常大,我需要的是椭圆相对于坐标来说是一个点  
  Top

2 楼cuike519(I will be back!)回复于 2004-05-02 23:34:20 得分 20

作图我不熟悉所以不敢乱说,下面这个例子也许对你有所帮助!  
  http://www.codeproject.com/csharp/ZedGraph.aspTop

3 楼elusion(落)回复于 2004-05-02 23:41:07 得分 80

什么意思啊  
  不能这样么   g.DrawEllipse   (redPen,(float)x,(float)y,0.1f,0.1f);Top

4 楼vivianfdlpw()回复于 2004-05-03 13:30:02 得分 0

汗。。。我真傻,看了几遍没看见这个重载方法。。。Top

相关问题

  • 用C语言画正弦曲线的问题
  • 有没有人用java画过动态正弦曲线图啊!100分求救,急
  • 如何在屏幕上画一个圆心在正弦曲线上运动的圆?我用gdi弄的效果很差。
  • 在一正弦曲线f(x)=Asin(nx)上迭加宽w,高h,间距s的方形坑,该如何写这个表达式?
  • 请教大侠:小弟想拟合一条曲线,这条曲线在宏观上是一条类似于开平方的曲线,微观上近似一条正弦曲线
  • C# 中如何画直线
  • turbo c/c++ 中怎样使用1024*768分辨率画图
  • 在VC中的C/C++ source code如何实现画图?
  • 在VC中的C/C++ source code如何实现画图程序?
  • c#中如何重画局部图像

关键词

  • 坐标
  • pb
  • pen
  • scaletransform
  • curvex
  • curvey
  • maxy
  • 原点
  • scaley
  • maxx

得分解答快速导航

  • 帖主:vivianfdlpw
  • cuike519
  • elusion

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo