См. Мой код ниже.Как заполнить окно WPF треугольниками, которые не покрывают друг друга?
Я использую DispatcherTimer, чтобы заполнить сетку треугольниками. Моя проблема заключается в том, что некоторые из треугольников, созданных моим кодом, покрывают eavch other. Как изменить код, чтобы убедиться, что этого не произойдет? Я хочу, чтобы они находились рядом друг с другом и со временем охватывали все окно, но не закрывали друг друга.
Random rnd = new Random();
DispatcherTimer Timer = new DispatcherTimer();
List<Point> Points = new List<Point>();
public MainWindow()
{
InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
((Button)(sender)).Visibility = Visibility.Hidden;
Timer.Interval = new TimeSpan(0,0,1);
Timer.Tick += Timer_Tick;
Timer.Start();
}
void Timer_Tick(object sender, EventArgs e)
{
if (Points.Count == 0)
{
Point P1 = new Point(rnd.Next(1000), rnd.Next(800));
Point P2 = new Point(rnd.Next(1000), rnd.Next(800));
Points.Add(P1);
Points.Add(P2);
}
int First = rnd.Next(Points.Count);
int Second = rnd.Next(Points.Count);
while (Second==First)
{
Second = rnd.Next(Points.Count);
}
Point NewPoint = new Point(rnd.Next(1000), rnd.Next(800));
Points.Add(NewPoint);
Polygon Poly = new Polygon();
Poly.Points.Add(Points[First]);
Poly.Points.Add(Points[Second]);
Poly.Points.Add(NewPoint);
Poly.StrokeThickness = 1.5;
Poly.Stroke = Brushes.Black;
int FillColor = rnd.Next(3);
switch (FillColor)
{
case 0:
Poly.Fill = Brushes.Red;
break;
case 1:
Poly.Fill = Brushes.Yellow;
break;
default:
Poly.Fill = Brushes.Lime;
break;
}
G1.Children.Add(Poly);
}
Когда снова смотрит в эту проблему (и ваш ответ). Я не мог больше согласиться. Тем не менее, есть ли у кого-нибудь идеи для кода, которые разрешат проблему? Предоставление этого задания рисования треугольников, которые не будут сталкиваться или пересекаться, очень просто для человека. Почему это невозможно для компьютера? –
Это не должно быть сложно с самого начала, но чем ближе вы к решению, тем труднее это будет. (остатки триангуляции, вероятно, потребуют другого алгоритма) плюс первые два стартовых пуаса для трайлинга не должны быть любыми пунктами, сделанными ранее (например, в половине края треугольника) – wondra