簡體   English   中英

C#中的旋轉矩陣繪制怪異的形狀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM