C#中的旋转矩阵绘制出怪异的形状
问题描述:
我正在尝试围绕圆的圆周来转换一个点。C#中的旋转矩阵绘制出怪异的形状
为了测试我的代码,我只需要翻译该点并为每个角度增量画一条从中心到翻译点的直线。
这应该看起来像一个自行车轮,但它看起来更像一个铲子。奇怪的是,我是否在数学函数中使用了弧度或度数似乎是一样的。
for (double degrees = 0; degrees <= 360; degrees += 1)
{
double radians = Math.PI * degrees/180.0;
Console.Write("degrees = " + degrees + " radians = " + radians);
double sx = 0.0;
double sy = -100.0;
sx = ((sx * Math.Cos(radians)) + (sy * Math.Sin(radians)));
sy = (-(sx * Math.Sin(radians)) + (sy * Math.Cos(radians)));
Console.WriteLine(", sx = " + sx + ", sy = " + sy);
g.DrawLine(new Pen(Brushes.GhostWhite), 200, 200, (int)sx+200, (int)sy+200);
}
答
所以你数学是正确的。你使用这个矩阵来计算旋转。
[cos(r) sin(r)]
[-sin(r) cos(r)]
但是你的编码是错的!
在使用它计算sy
之前,您已将sx
更改为旋转值!
您正在对x和y按顺序执行计算,而在矩阵中,它们是同时完成的。所以,你的y坐标被错误地计算,使用剪切坐标系统,因为它是...
你需要这样做:
double sx = 0.0;
double sy = -100.0;
double nsx = ((sx * Math.Cos(radians)) + (sy * Math.Sin(radians)));
double nsy = (-(sx * Math.Sin(radians)) + (sy * Math.Cos(radians)));
g.DrawLine(new Pen(Brushes.GhostWhite), 200, 200, (int)nsx+200, (int)nsy+200);
答
double radius = 200;
for (double degrees = 0; degrees <= 360; degrees += 1)
{
double radians = Math.PI * degrees/180.0;
int sx = (int) (200 + radius * Math.Cos(radians));
int sy = (int) (200 + radius * Math.Sin(radians));
g.DrawLine(new Pen(Brushes.GhostWhite), 200, 200, sx, sy);
}
+1
代码的解释改变了你这样做将使这一个实际的答案。 –
答
我认为这是一个纯粹的数学问题。尝试:
double radius = 100;
double sx = radius * Math.Cos(radians);
double sy = radius * Math.Sin(radians);
gah为什么我没有看到/ facepalm – amcashcow