我想做一些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)
不需要最后一行.
我需要保持短暂的价值观.所以我需要一个包含最多项目数的列表.我希望它能够接受新的添加,即使它已经满了.在这种情况下,我希望我添加的最旧的项目丢失.我找不到任何适合这个目的的课程然后自己做了.我一定会在以后添加方法,但现在我有我需要的东西.
所以我的第一个问题是:它是一个正确的代码: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,Last并Count返回null.我认为这会更有意义.但我不知道怎么做,因为返回类型是int或T,我不想添加像这样的约束where T:Nullable.由于我没有看到任何解决方案,我想知道Exception是不是,毕竟是最优雅的方式.或者我应该实现类似GetFirst(out T first)甚至是TryGetFirst(out T)什么方法?
我找不到任何方法来检索表示字符串的Path对象。是否存在?必要点的列表就足够了,但是我想在内部使用一条路径。
例如,在GDI +中有:
GraphicsPath p = new GraphicsPath();
p.AddString("string");
Run Code Online (Sandbox Code Playgroud)
从那里可以访问和修改“绘制的字符串”的任何点。
PS:我并不是说要沿着路径绘制文本。