সি #, ডব্লিউপিএফ - 1523
মারাত্মক গুরুতর নয়; এটি মূলত এটি চেষ্টা করেছিল কিনা তা চেষ্টা ছিল।
আমি এখানে যা করছি তা ডেটা বাইন্ডিং এবং টেম্প্লেটিংয়ের মাধ্যমে কণা প্রদর্শন করতে ডাব্লুপিএফ-তে একটি আইটেমসন্ট্রোল (মেনু, যেহেতু এটি কম) ব্যবহার করছে using একটি ডেটা টেম্পলেট কণাগুলি দেখতে কেমন তা নিয়ন্ত্রণ করে (এক্ষেত্রে একটি সাধারণ চেনাশোনা) এবং ডেটা বাইন্ডিং কণার রঙ এবং অবস্থান নিয়ন্ত্রণ করে।
প্রতিটি কণার একটি অবস্থান, একটি রঙ এবং একটি দিক থাকে যা টাইমার দ্বারা আপডেট হয়। প্রাথমিকভাবে এলোমেলো দিকনির্দেশ দিয়ে উইন্ডোটির মাঝখানে একগুচ্ছ কণা তৈরি করা হয়। এই সংগ্রহটি আইটেমসন্ট্রোলের সাথে ডেটা-আবদ্ধ হয়ে যায় যা বৈশিষ্ট্যগুলি আপডেট হয়ে গেলে স্বয়ংক্রিয়ভাবে কণাগুলি প্রদর্শন করতে পরিচালনা করে। মহাকর্ষের কারণে কণাগুলি কিছুটা টেনে নামানো হয়।
স্বীকৃতি স্বরূপ এটি একটি দীর্ঘ দীর্ঘ পেয়েছে। তবে কমপক্ষে এটি দেখতে সুন্দর দেখাচ্ছে:

বাদ দিয়ে অবশ্যই এটি আরও খাটো করা যেতে পারে:
- মাধ্যাকর্ষণ, কণাগুলি চারদিকে সমানভাবে প্রসারিত করে;
- প্রারম্ভিক ভেক্টরগুলির জন্য সাধারণ বিতরণ, কারণগুলি একটি বিচ্ছিন্ন »বাক্স in এ কণাগুলি প্রসারিত করে;
- উজ্জ্বলতা প্রকরণ, কণা কালো রেখে।
আমি নান্দনিকতার স্বার্থে এটি না করার পছন্দ করেছিলাম। এই সমাধানটি নির্বিশেষে অন্য যে কোনও কিছুর চেয়ে দীর্ঘ। ডেটা বাঁধাই এবং টেম্প্লেটিং পদ্ধতিটি মার্জিত হতে পারে তবে এটি একটি বিটম্যাপটি কেবল আপডেট করার সাথে তুলনা করে বেশ ভার্জোজ। (দ্রষ্টব্য: উপরের সমস্ত কিছু রেখে আমি এটিকে 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;
}