我想从笛卡尔表示法转到我从计算机导入的图像(圆)上的极点,但是我不知道该怎么做。
这是我已经尝试过的代码:
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);
}
}
答案 0 :(得分:0)
好的。您不会获得支持,但这是星期五,我正在等待一些构建。
第一:了解您的配方师 https://www.mathsisfun.com/polar-cartesian-coordinates.html
x, y
Radius, Angle (Could be 0-360° or 0 - 2*PI)
配方师:
..因为Tan,Sin,Cos无法在0-360°上工作。
现在您可以使用它了。
Aaaand由于天气好,这里有一些示例代码:
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);
}