-3

我想从笛卡尔表示转到我从计算机导入的图像(圆形)上的极点,但我不知道该怎么做。

这是我已经尝试过的代码:

private double rho (double t)
{
    return (po-(vrot*tp*t));
}

private double tetha (double t)
{
    return vrot*2*Math.PI*t;
}

private double x (double t)
{
    return rho(t) * Math.Sin(tetha(t));
}

private double y (double t)
{
    return rho(t) * Math.Cos(tetha(t));
}

public void DrawLinePoint(Bitmap bmp)
{

    // Create pen.
    Pen blackPen = new Pen(Color.Red, 3);

    // Create points that define line.
    PointF[] points =
        {
            new PointF((float)x(1.81818182),(float)y(1.81818182)),
            new PointF((float)x(3.63636364), (float)y(3.63636364)),
            
        };

    // Draw line to screen.
    using(var graphics = Graphics.FromImage(bmp))
    {
        graphics.DrawLines(blackPen, points);
    }
}
4

1 回答 1

0

第一:极坐标和笛卡尔坐标以及如何在它们之间转换

  • 笛卡尔:x, y
  • 极性:Radius, Angle (Could be 0-360° or 0 - 2*PI)

公式:

  • 半径 = √X²+Y²
  • 角度 = Tan-1 (Y/X)
  • 度数角度 = (Tan-1 (Y/X) * 360) / (2*PI)

..因为 Tan、Sin、Cos 不适用于 0-360°。

  • X = 半径 * Cos(角度)
  • Y = 半径 * Sin(角度)

现在您可以使用它了。

这是一些示例代码:

public class CartesianCoord
{
    public double X { get; set; }
    public double Y { get; set; }

    public PolarCoord ToPolarCoord()
    {
        PolarCoord p = new PolarCoord();
        p.Radius = Math.Sqrt(X * X + Y * Y);
        p.Angle = Math.Atan2(Y / X);
        return p;
    }
}

public class PolarCoord
{
    public double Radius { get; set; }
    public double Angle { get; set; }
    public double AngleDegree { get { return (this.Angle * 360) / (Math.PI * 2); } set { this.Angle = (value * 2 * Math.PI) / 360; } }

    public CartesianCoord ToCartesianCoors()
    {
        CartesianCoord c = new CartesianCoord();

        c.X = this.Radius * Math.Cos(Angle);
        c.Y = this.Radius * Math.Sin(Angle);

        return c;
    }
}

static void Main()
{
    CartesianCoord c = new CartesianCoord() { X = 12, Y = 5 };
    Console.WriteLine("Cartesian Coords - X: {0}, Y: {1}", c.X, c.Y);
    PolarCoord p = c.ToPolarCoord();
    Console.WriteLine("Polar Coords - Arc: {0} ({1}°), Radius: {2} ", p.Angle, p.AngleDegree, p.Radius);
    CartesianCoord c2 = p.ToCartesianCoors();
    Console.WriteLine("Cartesian Coords - X: {0}, Y: {1}", c2.X, c2.Y);

}
于 2018-08-03T12:43:32.150 回答