我想做一些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)
不需要最后一行.
假设我们有一个共享队列(使用数组实现),两个线程可以访问,一个用于从中读取数据,另一个用于向其写入数据.现在,我遇到了同步问题.我正在使用Win32 API(EnterCriticalSection等)实现这一点.
但我的好奇心是队列的入队和出队操作中的关键部分代码是什么?
仅仅因为,两个线程正在使用共享资源?为什么我无法看到任何问题:前端和后端都被维护,因此,当ReaderThread读取时,它可以从前端读取,当WriterThread写入时,它可以轻松写入后端.
可能会出现哪些潜在问题?