小编Mr.*_*.Pe的帖子

为什么2D变换需要3x3矩阵?

我想做一些2D绘图,因此想要实现一些矩阵变换.凭借我轻松的数学背景,我试图了解如何在C#中实现这一点(任何其他oop语言都可以做到这一点).

我读到的只是解释我们需要使用3x3矩阵来处理翻译.因为你不能用乘法进行翻译.但这是我们创建转换的矩阵的乘法.所以我们使用类似的东西:

{ x1, x2, tx }
{ y1, y2, ty }
{ 0,  0,  1  }
Run Code Online (Sandbox Code Playgroud)

我理解第三列的意思,但为什么我们需要第三列呢?在单位矩阵以及旋转,缩放或旋转中,最后一行是相同的.我还没有达到需要的操作吗?是因为某些语言(Java)使用"平方维度"数组表现更好吗?如果是这样的话,我可以在C#中使用3列和2行(因为锯齿状数组的效果也一样好或者更好).

例如,对于旋转+平移,我有一个像这样的矩阵

{ cos(rot)*x1, (-sin(rot))*x2, tx }
{ sin(rot)*y1, cos(rot)*y2,    ty }
{ 0,           0,              1  }
Run Code Online (Sandbox Code Playgroud)

不需要最后一行.

2d matrix homogenous-transformation

18
推荐指数
2
解决办法
2万
查看次数

列出限量项目

我需要保持短暂的价值观.所以我需要一个包含最多项目数的列表.我希望它能够接受新的添加,即使它已经满了.在这种情况下,我希望我添加的最旧的项目丢失.我找不到任何适合这个目的的课程然后自己做了.我一定会在以后添加方法,但现在我有我需要的东西.

所以我的第一个问题是:它是一个正确的代码:http://pastebin.com/0BCbyNqJ 这个类看起来足够干净了吗?

我的第二个问题是关于我抛出的这些例外情况.

/// <summary>
/// Oldest item added to the list
/// </summary>
public T First
{
    get
    {
        if (_head < 0)
            throw new IndexOutOfRangeException("The list is empty");

        if (_firstRoundDone)
            return _array[(_head + 1) % _max];
        else
            return _array[0];
    }
}
Run Code Online (Sandbox Code Playgroud)

在将任何内容添加到我的列表之前,我希望调用First,LastCount返回null.我认为这会更有意义.但我不知道怎么做,因为返回类型是int或T,我不想添加像这样的约束where T:Nullable.由于我没有看到任何解决方案,我想知道Exception是不是,毕竟是最优雅的方式.或者我应该实现类似GetFirst(out T first)甚至是TryGetFirst(out T)什么方法?

c# generics queue list

4
推荐指数
1
解决办法
2386
查看次数

获取字符串的(Android.Graphics)路径

我找不到任何方法来检索表示字符串的Path对象。是否存在?必要点的列表就足够了,但是我想在内部使用一条路径。

例如,在GDI +中有:

GraphicsPath p = new GraphicsPath(); 
p.AddString("string");
Run Code Online (Sandbox Code Playgroud)

从那里可以访问和修改“绘制的字符串”的任何点。

PS:我并不是说要沿着路径绘制文本。

fonts android canvas xamarin.android

3
推荐指数
1
解决办法
2075
查看次数