सी #, डब्ल्यूपीएफ - 1523
बहुत गंभीर नहीं है; यह मुख्य रूप से एक प्रयास था कि क्या यह वास्तव में काम करता है।
मैं यहाँ क्या कर रहा हूँ डेटा बाइंडिंग और टेम्प्लेटिंग के माध्यम से कणों को प्रदर्शित करने के लिए WPF में एक आइटमकंट्रोल (मेनू, चूंकि यह छोटा है) का उपयोग कर रहा है। एक डेटा टेम्प्लेट नियंत्रित करता है कि कण कैसे दिखते हैं (इस मामले में एक साधारण चक्र) और डेटा बाइंडिंग कणों के रंग और स्थिति को नियंत्रित करता है।
प्रत्येक कण में एक स्थिति, एक रंग और एक दिशा होती है जो टाइमर द्वारा अपडेट की जाती है। प्रारंभ में कणों का एक गुच्छा खिड़की के केंद्र में (सामान्य-वितरित) यादृच्छिक दिशाओं से उत्पन्न होता है। उस संग्रह को आइटम-कन्ट्रोल के लिए डेटा-बाउंड किया जाता है, जो तब गुणों को प्रदर्शित करने के लिए स्वचालित रूप से कणों को प्रदर्शित करता है। गुरुत्वाकर्षण के कारण कणों को थोड़ा नीचे खींचा जाता है।
यह थोड़ा लंबा हो गया, भर्ती कराया गया। लेकिन कम से कम यह अच्छा लग रहा है:

इसे निश्चित रूप से कम करके कम किया जा सकता है:
- गुरुत्वाकर्षण, जिससे कणों का सभी पक्षों पर समान रूप से विस्तार होता है;
- प्रारंभिक वैक्टर के लिए सामान्य वितरण, जिससे कणों को एक विरल »बॉक्स« में विस्तारित किया जाता है;
- चमक भिन्नता, कणों काले छोड़कर।
मैंने सौंदर्यशास्त्र के हित में ऐसा नहीं करने का विकल्प चुना। यह समाधान लगभग किसी भी चीज की तुलना में अधिक लंबा है। डेटा-बाइंडिंग और टेंपलेटिंग दृष्टिकोण सुरुचिपूर्ण हो सकता है लेकिन यह केवल एक बिटमैप को अपडेट करने की तुलना में काफी क्रियात्मक है। (नोट: मैंने इसे उपरोक्त सभी को छोड़ कर 1356 में प्राप्त किया, लेकिन यह तब भयानक लग रहा है।)
कोड को तीन फ़ाइलों में वितरित किया जाता है, जो कि यहाँ पर सुपाठ्य रूप में दिए गए हैं:
App.xaml
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" StartupUri="W.xaml"/>
W.xaml
<Window x:Class="W" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Menu Name="i">
<Menu.ItemTemplate>
<DataTemplate>
<Ellipse Width="2" Height="2" Fill="#000" Opacity="{Binding O}">
<Ellipse.RenderTransform>
<TranslateTransform X="{Binding X}" Y="{Binding Y}"/>
</Ellipse.RenderTransform>
</Ellipse>
</DataTemplate>
</Menu.ItemTemplate>
<Menu.Template>
<ControlTemplate>
<ItemsPresenter/>
</ControlTemplate>
</Menu.Template>
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
</Menu>
</Window>
W.xaml.cs
using M = System.Math;
using T = System.Timers.Timer;
using System;
using System.ComponentModel;
partial class W
{
int a;
T t = new T(99);
public W()
{
InitializeComponent();
Height = Width = 500;
var r = new Random();
Func<double> n = () => 2 * (M.Sqrt(-2 * M.Log(r.NextDouble())) * M.Sin(6 * r.NextDouble()));
var l = new System.Collections.Generic.List<P>();
for (; a++ < 300; )
l.Add(new P { X = 250, Y = 250, f = n(), g = n() });
i.ItemsSource = l;
t.Elapsed += delegate
{
foreach (P x in l)
{
x.X += x.f;
x.Y += x.g += .2;
x.O = M.Max(1 - M.Sqrt(M.Pow(250 - x.X, 2) + M.Pow(250 - x.Y, 2)) / 250, 0);
}
};
t.Start();
}
}
class P : System.Windows.ContentElement, INotifyPropertyChanged
{
public double y, f, g;
public double X { get; set; }
public double O { get; set; }
public double Y
{
get { return y; }
set
{
y = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(""));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}