C# 如何缩放以使图形保持';什么是限制?

C# 如何缩放以使图形保持';什么是限制?,c#,graphics,rectangles,C#,Graphics,Rectangles,你好, 我需要一些帮助 我必须画一个图形(更确切地说是一个函数,它计算一个给定数的素数:f(givenNumber)=素数的个数0) 为了做到这一点,我使用了一个矩形(这是绘制图形的地方)、图形、笔和大小(用于客户端空间) 我的大问题如下: -如果我输入10-100,图形将正确地绘制到矩形中,而不会退出。 然而,如果我输入1000,图形就会“无限”地离开矩形 如何缩放,使用什么,这样无论我有多少个点,图形都会保持其极限? 如果有帮助,代码将是: // get the graphics objec

你好,

我需要一些帮助

我必须画一个图形(更确切地说是一个函数,它计算一个给定数的素数:f(givenNumber)=素数的个数0)

为了做到这一点,我使用了一个矩形(这是绘制图形的地方)、图形、笔和大小(用于客户端空间)

我的大问题如下:

-如果我输入10-100,图形将正确地绘制到矩形中,而不会退出。 然而,如果我输入1000,图形就会“无限”地离开矩形

如何缩放,使用什么,这样无论我有多少个点,图形都会保持其极限? 如果有帮助,代码将是:

// get the graphics object and create our pen for drawing.
object[] args;
Graphics g = e.Graphics;
Pen pen = new Pen(Color.Blue);
// figure out the client space
Size sz = this.ClientSize;
// Determine the rectangle that we will use to draw
int offsetHeight = this.textBox1Limita.Location.Y + this.textBox1Limita.Height + 20;
int offsetWidth = 40;
int maxWidth = sz.Width - offsetWidth * 2;
int maxHeight = sz.Height - offsetHeight * 2;
Rectangle drawingSpace = new Rectangle(offsetWidth, offsetHeight, maxWidth, maxHeight);
// Draw the begining rectangle
g.DrawRectangle(pen, offsetWidth, offsetHeight, maxWidth, maxHeight);
// at this point, only continue if the user pressed enter in one of the two input boxes.
if (!ValuesEntered) return;
try
{
   args = new object[1];
   args[0] = int.Parse(this.textBox1Limita.Text);
}
catch (Exception)
{
   // We reached here, the user input some bogus values into the box.
   // Just return so we dont do anything with those values.
   return;
}

int lim=(int)mi.Invoke(o, args);
int step =5;
int k = 1;

g.DrawLine(pen, drawingSpace.X + 1 * step, offsetWidth + maxHeight - 1 * step, drawingSpace.X + 2 * step, offsetWidth + maxHeight - 1 * step);

for (int j = 0; j <lim; j++)
{
   if (j == lim-1)
   {
      g.DrawLine(pen, drawingSpace.X + vectorPrime[j] * step, offsetWidth + maxHeight - k * step, drawingSpace.X + (int)args[0] * step, offsetWidth + maxHeight - k * step);
   }
   else
  {
      g.DrawLine(pen, drawingSpace.X + vectorPrime[j] * step, offsetWidth + maxHeight - k * step, drawingSpace.X + (vectorPrime[j + 1]-1) * step, offsetWidth + maxHeight - k * step);

      g.DrawLine(pen, drawingSpace.X + (vectorPrime[j + 1]-1) * step, offsetWidth + maxHeight - k * step, drawingSpace.X + vectorPrime[j+1]*step, offsetWidth + maxHeight - (k+1)*step);
      k++;
  }
}
//获取图形对象并创建用于绘图的笔。
对象[]args;
图形g=e.图形;
钢笔=新钢笔(颜色为蓝色);
//找出客户机空间
Size sz=this.ClientSize;
//确定我们将用于绘制的矩形
int offsetHeight=this.textBox1Limita.Location.Y+this.textBox1Limita.Height+20;
int offsetWidth=40;
int maxWidth=sz.Width-offsetWidth*2;
int maxHeight=sz.Height-离视*2;
矩形绘图空间=新矩形(偏移宽度、偏移视线、最大宽度、最大高度);
//绘制开始的矩形
g、 DrawRectangle(画笔、偏移宽度、偏移视线、最大宽度、最大高度);
//此时,仅当用户在两个输入框之一中按enter键时,才继续。
如果(!valuesenter)返回;
尝试
{
args=新对象[1];
args[0]=int.Parse(this.textBox1Limita.Text);
}
捕获(例外)
{
//我们到了这里,用户在框中输入了一些虚假的值。
//只要返回,我们就不会对这些值做任何事情。
返回;
}
int lim=(int)mi.Invoke(o,args);
int步长=5;
int k=1;
g、 绘图线(画笔、绘图空间.X+1*步、偏移网宽+最大高度-1*步、绘图空间.X+2*步、偏移网宽+最大高度-1*步);

对于(int j=0;j您的目标平台是什么?您可以发布一些屏幕截图吗?您可以预先计算您将拥有的值的数量,从而推断尺寸并计算项目的比例,然后重新绘制,或者研究一种可伸缩的解决方案,如SVG。如果您确实需要无限伸缩性,SVG听起来是一种可行的方法。我补充说ed那些截图..什么是SVG?:-s既然你已经知道C#,那就研究一下WPF来制作可以拉伸的图表。我已经做了,这并不太难,尽管我没有足够的回忆来发布正确的答案。这并不是说你不能用GDI+实现同样的效果(它可能会更快),但WPF很不错。不过,WPF的学习曲线很陡峭。