[英]Rotation matrix in C# draws a weird shape
我正在嘗試繞圓的圓周平移一個點。
為了測試我的代碼,我只需平移該點並針對每個角度增量從中心到平移點畫一條線。
它看起來應該像自行車車輪,但是看起來更像鍬。 奇怪的是,無論我在Math函數中使用弧度還是度數,看起來都一樣。
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)]
但是您的編碼是錯誤的!
在使用sx
計算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);
}
我認為這純粹是數學問題。 嘗試:
double radius = 100;
double sx = radius * Math.Cos(radians);
double sy = radius * Math.Sin(radians);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.