Я пытаюсь создать сетку Aitoff-Hammer в Silverlight, используя C #. Это должно выглядеть как это минус точки и цифры.
Я не программист, но смог собрать вместе этот , используя файл ActionScript, чтобы сделать то же самое, что было написано моим предшественником
Как видите, я получаю сетку плюс ненужные диагональные линии. Я не уверен, как избежать рисования диагональных линий в моем коде.
Буду очень признателен за любую помощь, которую кто-либо может оказать, чтобы решить мою проблему или указать, что я могу делать неправильно. Пожалуйста, дайте мне знать, если я пропустил важную информацию. Спасибо.
Вот мой код:
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;
}
}