1

在我最近的问题的这个答案中,有一些绘制图表的代码,但我无法将其编辑为接受任何点列表作为参数的东西。

我希望绘图方法接受这些参数:

  • 的列表Vector2Point或者VertexPositionColor,我可以使用任何一个。
  • 整个图的偏移量

这些可选要求将不胜感激:

  • 可以覆盖VertexPositionColor的颜色并应用于所有点的颜色。
  • 图形的大小,因此可以缩小或扩大,可以Vector2作为乘数,也可以Point作为目标大小。甚至可以将其与中的偏移量结合起来Rectangle

如果可能的话,我想把它全部放在一个类中,这样图形可以彼此分开使用,每个都有自己的Effect.world矩阵等。


这是代码(由Niko Drašković编写):

Matrix worldMatrix;
Matrix viewMatrix;
Matrix projectionMatrix;
BasicEffect basicEffect;

VertexPositionColor[] pointList;
short[] lineListIndices;

protected override void Initialize()
{
    int n = 300;
    //GeneratePoints generates a random graph, implementation irrelevant
    pointList = new VertexPositionColor[n];
    for (int i = 0; i < n; i++)
        pointList[i] = new VertexPositionColor() { Position = new Vector3(i, (float)(Math.Sin((i / 15.0)) * height / 2.0 + height / 2.0 + minY), 0), Color = Color.Blue };

    //links the points into a list
    lineListIndices = new short[(n * 2) - 2];
    for (int i = 0; i < n - 1; i++)
    {
        lineListIndices[i * 2] = (short)(i);
        lineListIndices[(i * 2) + 1] = (short)(i + 1);
    }

    worldMatrix = Matrix.Identity;
    viewMatrix = Matrix.CreateLookAt(new Vector3(0.0f, 0.0f, 1.0f), Vector3.Zero, Vector3.Up);
    projectionMatrix = Matrix.CreateOrthographicOffCenter(0, (float)GraphicsDevice.Viewport.Width, (float)GraphicsDevice.Viewport.Height, 0, 1.0f, 1000.0f);

    basicEffect = new BasicEffect(graphics.GraphicsDevice);
    basicEffect.World = worldMatrix;
    basicEffect.View = viewMatrix;
    basicEffect.Projection = projectionMatrix;

    basicEffect.VertexColorEnabled = true; //important for color

    base.Initialize();
}

以及绘制方法:

foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes)
{
    pass.Apply();
    GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(
        PrimitiveType.LineList,
        pointList,
        0,
        pointList.Length,
        lineListIndices,
        0,
        pointList.Length - 1
    );
}
4

1 回答 1

6

Graph可以在此处找到执行请求的类。
大约 200 行代码似乎太多,无法粘贴在这里。

在此处输入图像描述

通过将浮点数列表(可选地带有颜色)传递给它的方法Graph来绘制。Draw(..)

Graph属性是:

  • Vector2 Position-图表的左下角
  • Point Size- 图形的宽度 ( .X) 和高度 ( .Y)。在水平方向上,值将被分布以完全适合宽度。在垂直方向上,所有值都将用 缩放Size.Y / MaxValue
  • float MaxValue- 将在图表顶部的值。所有图表外的值(大于MaxValue)都将设置为此值。
  • GraphType Type- 使用可能的值GraphType.LineGraphType.Fill,确定图形是仅绘制线条还是底部填充。

该图是用线列表/三角形带绘制的。

于 2012-12-21T17:32:27.960 回答