我正在嘗試使用C#在Silverlight中創建Aitoff-Hammer網格。它應該看起來像this減去點和數字。以編程方式在Silverlight中使用C#繪圖
我不是程序員,但已經能夠使用ActionScript文件將this拼在一起做同樣的事情,這是我的前任編寫的。正如你所看到的,我得到了網格和不需要的對角線。我不確定如何避免在我的代碼中繪製對角線。
任何人可以提供幫助解決我的問題或指出我可能會做錯什麼將不勝感激。如果我遺漏了重要信息,請讓我知道。謝謝。
這裏是我的代碼:
PolyLineSegment segment = new PolyLineSegment();
PathFigure figure = new PathFigure();
figure.StartPoint = new Point(xCenter, yCenter);
PathGeometry geometry = new PathGeometry();
Path path = new Path();
path.Stroke = new SolidColorBrush(Colors.Black);
path.StrokeThickness = 2;
aitoff coords = new aitoff();
for (int ra = 0; ra <= 24; ra = ra + 3)
{
for (int dec = -90; dec <= 90; dec = dec + 3)
{
points = coords.GetAitoffCoord(ra, dec);
double xCoord = xCenter + points.X * width/2;
double yCoord = yCenter + points.Y * height/2;
segment.Points.Add(new Point(xCoord, yCoord));
}
}
for (int dec = -90; dec <= 90; dec = dec + 30)
{
for (int ra = 0; ra <= 12; ra = ra + 1)
{
points = coords.GetAitoffCoord(ra, dec);
double xCoord = xCenter + points.X * width/2;
double yCoord = yCenter + points.Y * height/2;
segment.Points.Add(new Point(xCoord, yCoord));
}
}
for (int dec = -90; dec <= 90; dec = dec + 30)
{
for (double ra = 12.01; ra <= 25; ra++)
{
points = coords.GetAitoffCoord(ra, dec);
double xCoord = xCenter + points.X * width/2;
double yCoord = yCenter + points.Y * height/2;
segment.Points.Add(new Point(xCoord, yCoord));
}
}
for (int dec = -90; dec <= 90; dec = dec + 3)
{
double ra = 12.01;
points = coords.GetAitoffCoord(ra, dec);
double xCoord = xCenter + points.X * width/2;
double yCoord = yCenter + points.Y * height/2;
segment.Points.Add(new Point(xCoord, yCoord));
}
figure.Segments.Add(segment);
geometry.Figures.Add(figure);
path.Data = geometry;
LayoutRoot.Children.Add(path);
// GetAitoff
public class aitoff
{
double ra;
double dec;
Point coords = new Point();
double ra2deg = Math.PI/180.0f;
public Point GetAitoffCoord(double raIn, double decIn)
{
ra = raIn * 360/24;
dec = decIn;
if (ra > 180)
ra = ra - 360;
double l = ra * ra2deg;
double b = dec * ra2deg;
double t = Math.Sqrt(2/(1 + Math.Cos(b) * Math.Cos(l/2)));
double x = 2 * t * Math.Cos(b) * Math.Sin(l/2);
double y = t * Math.Sin(b);
coords.X = x/(-2 * Math.Sqrt(2));
coords.Y = y/(-1 * Math.Sqrt(2));
return coords;
}
}
是否有一個原因是你在代碼中而不是在XAML中這樣做? – Jermismo
我將在網格中添加元素,如果我可以通過編程方式處理網格上的點,我認爲會更容易。 – Kamal