Monday, October 24, 2011

Quasicrystals as sums of waves in the plane

On the suggestion of a friend, I rendered this animation:

This quasicrystal is full of emergent patterns, but it can be described in a simple way. Imagine that every point in the plane is shaded according to the cosine of its y coordinate. The result would look like this:

Now we can rotate this image to get other waves, like these:

Each frame of the animation is a summation of such waves at evenly-spaced rotations. The animation occurs as each wave moves forward.

I recommend viewing it up close, and then from a few feet back. There are different patterns at each spatial scale.

The code

To render this animation I wrote a Haskell program, using the Repa array library. For my purposes, the advantages of Repa are:

  • Immutable arrays, supporting clean, expressive code
  • A fast implementation, including automatic parallelization
  • Easy output to image files, via repa-devil

Here is a simplified (but complete!) program, which renders a single still image.

import Data.Array.Repa ( Array, DIM2, DIM3, Z(..), (:.)(..) )
import qualified Data.Array.Repa as R
import qualified Data.Array.Repa.IO.DevIL as D

import Data.Word ( Word8 )
import Data.Fixed ( divMod' )

For clarity, we define a few type synonyms:

type R     = Float
type R2 = (R, R)
type Angle = R

We'll convert pixel indices to coordinates in the real plane, with origin at the image center. We have to decide how many pixels to draw, and how much of the plane to show.

pixels :: Int
pixels = 800
scale :: R
scale = 128

Repa's array indices are "snoc lists" of the form (Z :. x :. y). By contrast, our planar coordinates are conventional tuples.

point :: DIM2 -> R2
point = \(Z :. x :. y) -> (adj x, adj y) where
adj n = scale * ((2 * fromIntegral n / denom) - 1)
denom = fromIntegral pixels - 1

A single wave is a cosine depending on x and y coordinates in some proportion, determined by the wave's orientation angle.

wave :: Angle -> R2 -> R
wave th = f where
(cth, sth) = (cos th, sin th)
f (x,y) = (cos (cth*x + sth*y) + 1) / 2

To combine several functions, we sum their outputs, and wrap to produce a result between 0 and 1. As n increases, (wrap n) will rise to 1, fall back to 0, rise again, and so on. sequence converts a list of functions to a function returning a list, using the monad instance for ((->) r).

combine :: [R2 -> R] -> (R2 -> R)
combine xs = wrap . sum . sequence xs where
wrap n = case divMod' n 1 of
(k, v) | odd k -> 1-v
| otherwise -> v

To draw the quasicrystal, we combine waves at 7 angles evenly spaced between 0 and π.

angles :: Int -> [Angle]
angles n = take n $ enumFromThen 0 (pi / fromIntegral n)

quasicrystal :: DIM2 -> R
quasicrystal = combine (map wave (angles 7)) . point

We convert an array of floating-point values to an image in two steps. First, we map floats in [0,1] to bytes in [0,255]. Then we copy this to every color channel. The result is a 3-dimensional array, indexed by (row, column, channel). repa-devil takes such an array and outputs a PNG image file.

toImage :: Array DIM2 R -> Array DIM3 Word8
toImage arr = R.traverse arr8 (:. 4) chans where
arr8 = (floor . (*255) . min 1 . max 0) arr
chans _ (Z :. _ :. _ :. 3) = 255 -- alpha channel
chans a (Z :. x :. y :. _) = a (Z :. x :. y)

main :: IO ()
main = do
let arr = R.fromFunction (Z :. pixels :. pixels) quasicrystal
D.runIL $ D.writeImage "out.png" (toImage arr)

Running it

Repa's array operations automatically run in parallel. We just need to enable GHC's threaded runtime.

$ ghc -O2 -rtsopts -threaded quasicrystal.lhs
$ ./quasicrystal +RTS -N
$ xview out.png

And it looks like this:

Note that repa-devil silently refuses to overwrite an existing file, so you may need to rm out.png first.

On my 6-core machine, this parallel code ran in 3.72 seconds of wall-clock time, at a CPU utilization of 474%. The same code compiled without -threaded took 14.20 seconds, so the net efficiency of parallelization is 382%. This is a good result; what's better is how little work it required on my part. Cutting a mere 10 seconds from a single run is not a big deal. But it starts to matter when rendering many frames of animation, and trying out variations on the algorithm.

As a side note, switching from Float to Double increased the run time by about 30%. I suspect this is due to increased demand for memory bandwidth and cache space.

You can grab the Literate Haskell source and try it out on your own machine. This is my first Repa program ever, so I'd much appreciate feedback on improving the code.

Be sure to check out Michael Rule's work on animating quasicrystals.


  1. How can you be doing both

    > import qualified Data.Array.Repa as R


    > type R = Float

    at the same time? My Haskell is very rusty, but I can't see how that would work...

  2. Should be fine... "R" will refer to the type, since "R" by itself as a module qualifier makes no sense.

  3. Ported to HTML5 canvas:

  4. nice idea! reminds me of the old plasmas in the demoscene...
    ported to webgl via shadertoy - realtime in your browser!

  5. The resultant image isn't a true structure of a quasicrystal, is it? Doesn't the pattern repeat beyond the bounds of the image?

  6. It has 7-fold symmetry about the origin, so it can't be periodic.

  7. These patterns never truly repeat, try it for yourself. You can render as much of the crystal as you like, and drive yourself crazy looking for alignment, but all you'll ever find are local regions that approximately align.

  8. Also ported to WebGL via PhiloGL. Can toggle fullscreen :)

  9. Does not work on nvidia because you define "float v" twice, just rename it to some other value and it works fine.

  10. // paste this into for pictures!
    // this is a gpu/webgl version of
    // 'implementation' by @mmalex for
    // fixed up by colski
    #ifdef GL_ES
    precision highp float;
    uniform float time;
    uniform vec2 resolution;
    void main(void)
    vec2 p = gl_FragCoord.xy / resolution.xy;
    float t=time*5.0; // change this for more speed
    vec2 up=vec2(256.0,0.0); // change this for finer/coarser stripes
    const float c = 0.90096886790241, s = 0.43388373911755; // sin and cos of pi / 7
    const vec2 rx=vec2(c, s), ry=vec2(-s, c);
    float sum = 0.0;
    for (int i = 0; i < 7; ++i)
    sum += cos(dot(p,up)+t);
    up = vec2(dot(up,rx), dot(up,ry));
    float a1=(cos(sum+2.0)+1.0) * 0.5; // the important wrap around term. play with this for different effects
    gl_FragColor = vec4(a1,a1,a1,1.0);

  11. Ported to Processing:

  12. What about an R version?

    frame <- function(N,Scale,Sym,FS,time) {
    Upx=FS; Upy=0;
    for (i in 1:Sym) {


    for (i in 0:49) {

  13. I found some code on the HaskellWiki for writing PNGs. I used it here:

    To use my code you create a BMP, write to it (it's just a mutable array under the hood), and then write that to PNG when you're done. No need for 3rd party libraries that are hard to install as it's just pure Haskell.

    The code is BSD3 so feel free to use it if you like it.

  14. Nice !! Same logic can be applied for CG water reflection using multiple level of normal maps moving in different direction and velocities.

  15. Interactive, color mapped version implemented in Processing.

  16. Great work. Can's say that I care for the Haskell though. Here's some Matlab code to recreate the image at the end of your post (which, by the way, I think is rotated by 90 degrees):

    N=800; scale=1/2.5; angles=7; t=0;
    for i=2:angles
    set(gcf,'Units','pixels','Position',[0 0 N N]);
    set(gca,'Position',[0 0 1 1]);

    The 800x800 image takes 0.2 sec. on my old 2.4 GHz Intel Core 2 Duo MacBook Pro. The R version from @fermin above was helpful. However, it used repeated multiplication of rotation matrices by each other in order to get the sequence of rotated waves, which can lead to numeric issues. Here's a more general Matlab function that outputs an arbitrarily-sized movie (takes under 3 sec. for a 512x512 25-frame movie like the animated GIF above):

    function quasicrystal(N,scale,angles,frames)


    if ~isvector(N) || isempty(N) || ~isnumeric(N) || length(N) > 2
    error('First input must be one or two element numeric vector.');
    if N(1) < 1 || mod(N(1),1) || (length(N) > 2 && (N(2) < 1 || mod(N(2),1)))
    error('First input must be vector >= 1.');

    if ~isscalar(scale) || isempty(scale) || ~isnumeric(scale) || scale <0
    error('Second input must be positive scalar numeric value.');

    if ~isscalar(angles) || isempty(angles) || ~isnumeric(angles)
    error('Third input must be scalar numeric value.');
    if angles < 1 || mod(angles,1)
    error('Third input must be integer >= 1.');

    if nargin == 3
    if ~isscalar(frames) || isempty(frames) || ~isnumeric(frames)
    error('Fourth input must be scalar numeric value.');
    if frames < 1 || mod(frames,1)
    error('Fourth input must be integer >= 1.');

    if length(N) == 2 && N(1) ~= N(2)


    for t=2*pi/frames*(0:frames-1)
    for i=2:angles

  17. Here's an updated and improved version of my Matlab code that can output movies, animated GIFs, or PNGs in Cartesian or log-polar coordinates (inspired by Michael Rule) with the ability to adjust contrast and apply a colormap:

    There are also some example animated GIFs and AVIs. The code will be particularly useful to anyone working in R or numPy/sciPy.

    Also @madan's comment above about water reflection made me think of when I tried outputting in just polar coordinates, as opposed to log-polar. When the scale is 1, the resulting animation is a very pleasing circular ripple pattern. It's especially nice if you have a full color colormap.

    Cheers, -- Andy

  18. Joining in the choir of reimplementations, here it is in GLSL (WebGL):

    It lets you muck about with the code interactively, so that's neat :)

  19. Hi, you make mind blowing ideas and a spectacular article hereanimated video production

  20. Is there a java equivalent for this code? :(

    1. check the rikrd's version. Processing is Java based, so this shouldn't be hard to port.

  21. Hey Keegan, I absolutely love this quasicrystal image, would you be interested in it being used as a vinyl LP album cover? I'm in the band Moths & Locusts from Vancouver Island, Canada, we're currently working on our 2nd full album. Pls drop me a line at Hope it's OK to post this here, looking forward to hearing back from you! ~Dave

  22. Thanks for posting! I really like what you've acquired here; You should keep it up forever! Best of luck
    puin afvoeren

  23. Nice article, thanks for the information. It's very complete information. I will bookmark for next reference
    jaring futsal | jaring golf | jaring pengaman proyek |
    jaring pengaman bangunan | jaring pengaman gedung

  24. Thank you for the hard work you have made in writing this post. In the future I am hopeful the same best work from you as well. Actually your creative writing abilities has motivated me

  25. You can't really say what is beautiful about a place, but the image of the place will remain vividly with you.

  26. You want to have your home cleanشركة تنظيف بخميس مشيط and free of microbes and germs hideous thou Dear customer looking for our company as we are working on the Eradication of Kaveh germs and microbes that are found in your home to keep you, you and your family as well germs harmful to children very much and our distinct also in the fight against insects finalشركة رش مبيدات بخميس مشيط where we use materials wipes final insects without harm to the residents of the house and this ugly flies, mosquitoes and ants insect understanding of the most dangerous insects in the environment where they work on the spread of germs in the home, do not worry Dear customer, We excel for any company of others, where we are working to destroy it entirely wished you Dear customer, take a look at Our Location
    شركة رش مبيدات بخميس مشيط
    شركة تنظيف بخميس مشيط
    شركة تنظيف خزانات بخميس ميشط
    شركة كشف تسربات المياه بخميس مشيط
    شركة مكافحة حشرات بخميس مشيط
    شركة تنظيف منازل بخميس مشيط
    شركة نقل اثاث وعفش بخميس مشيط
    شركة تسليك مجارى بخميس مشيط


  27. • Chemical control
    It can be defined as the pesticide as a natural chemical that may be manufactured with the ability to kill pests little concentration, and Lilja rights to the use of chemical method in the case of the rest of the natural failure or applied in response to insect pests, and resorts have also in the case of overcoming the intensity of the numerical limit economic embarrassment (Veadh number significantly), and success depends on the method of chemical control to choose the place and the right time and the right kind of also insecticide and used properly focus the recommended allowable until the success of the operation.

    شركة مكافحة حشرات بالقصيم

    • IPM
    Where he resorted to the use of human struggles Almtkmlh they use a chemical pesticide plus enemies vital
    And wrote pest management means the use of the factors that we can reduce the pests while minimizing reliance underestimated

    For you:
    شركة رش مبيدات بالقصيم
    شركة تنظيف بالقصيم
    شركة تنظيف خزانات بالقصيم
    شركة كشف تسربات المياه بالقصيم
    شركة مكافحة حشرات بالقصيم
    شركة تنظيف منازل بالقصيم
    شركة نقل اثاث وعفش بالقصيم
    شركة تسليك مجارى بالقصيم
    شركة تنسيق حدائق بالرياض

    For e_mail/

  28. Do you want to enjoy the beauty of the place you live in a house, apartment or other things; we are the best cleaning homes in Khamis Mushayt company; offering the most wonderful solutions that help get rid of all forms of pollutants and Alazakhat cost; and we are keen to clean all parts of the house ; and we are keen also to rely on the best powders and tools sterilization and cleaning wonderful in order to obtain a clean and distinct home; in addition, the company is providing a range of solutions if you suffer from shortness of your home or you are also suffering from the spread of insects in the house. شركة تنظيف بخميس مشيط
    Rely on the most important methods relied upon to get rid of the insects cost; but we have to fundamentally that these pesticides to be healthy and free from any form of defects cost is characterized; Valmbeidat non-sound may cause many serious damage both to individuals or to the environment; therefore we are the best spray pesticides in Khamis Mushayt شركة رش مبيدات بخميس مشيطcompany; you can get rid of all types of insects, no matter how dangerous; depending on a group of talented workers who can use pesticides and concentration in a certain way a professional manner, the process of insect spray properly succeed.

    شركة رش مبيدات بخميس مشيط
    شركة تنظيف بخميس مشيط
    شركة تنظيف خزانات بخميس ميشط
    شركة كشف تسربات المياه بخميس مشيط
    شركة مكافحة حشرات بخميس مشيط
    شركة تنظيف منازل بخميس مشيط
    شركة نقل اثاث وعفش بخميس مشيط
    شركة تسليك مجارى بخميس مشيط
    شركة تنسيق حدائق بالرياض

  29. aما اهمية شركات التنظيف بالبخار بالمدينه المنوره ؟
    شركة تنظيف بالبخار بالمدينة المنورة
    شركة تنظيف بالبخار بالمدينة المنورة
    شركة تنظيف بالبخار بالمدينة المنورة
    شركة تنظيف بالبخار بالمدينة المنورة
    هل تعلم ما اهمية شركة تنظيف بالبخار بالمدينه المنورة ؟ لأنها تقدم خدمة التنظيف بالبخار لكل اهالى المدينة المنورة بأفضل الوسائل والطرق الحديثة لاننا نعد أفضل شركة تنظيف بالبخار بالمدينه المنوره حيث تقدم الشركة جميع ما هو جديد باستمرار كى تتناسب قدرات الشركة مع متطلبات العصر كما اننا تهتم بالعمل علي تقليق ازدياد وجود الجراثيم والبكتيريا الضارة فى الاونة الاخيرة وبشكل سريع الامر الذى يحتاج مننا ان نعمل بكل اجتهاد واتقان وتطور من انفسنا كى نريح البيوت واى مكان يوجد به الانسان من الميكروبات والحشرات والافات التى قد تعمل علي تعكير صفو حياتنا وتعمل علي افساد الجو العام لذلك كان يجب علينا ان يكون عندنا وكان هذا الامر بمثابة مطلب مهم حتى نستطيع ان نعمل علي تقديم خدمة لكل اهالى المدينة خدمة نموذجية ونعمل علي تخليصهم وراحتهم وبشكل فعال ونضمن لهم منازل نظيفة وهادئة ومعقمة وخالية من اى بكتريا والتى قد تكون غير مرئية فى البيوت لذلك اردنا ان نعمل علي تطوير من انفسنا ونعتمد على النظافة بالبخار, خدمة النظافة بالبخار من أفضل المميزات التى تعطينا قدرة كبيرة على اظهار عملية نظافة جيدة وسليمة جدا لأن التنظيف بالبخار يعطينا أفضل عملية للقضاء علي كل الاتساخات والدهون وجميع الشوائب بأسرع وقت ممكن كما ان عنده الكثير جدا على انهاء تواجد الميكروبات فى منازلنا وباسرع وقت ممكن مع تقديم أفضل خدمة نموذجية متميزة جدا فى تطهير منزلك من اى افات او اى حشرات حتى من الممكن ان تضر ببيتك ونعمل فى ذلك القسم على ان يكون المكان منظف وصحى تماما وبشكل كامل
    التنظيف بالبخار

    شركة تنظيف بالبخار بالمدينه المنوره

    شركة نظافه بالبخار بالمدينه المنوره

    شركة تنظيف ستائر بالمدينه المنوره

    شركة تنظيف مفروشات بالمدينه المنوره

    شركة تنظيف بساط بالمدينه المنوره

    شركة تنظيف انتريهات بالمدينه المنوره

    شركة تنظيف صالونات بالمدينه المنوره

    شركة تنظيف مساجد بالمدينه المنوره

  30. شركة جلي بلاط رخام بالمدينة المنورة
    شركة جلي بلاط بالمدينة المنورة
    شركة جلي بلاط بالمدينة المنورة
    شركة جلي بلاط بالمدينة المنورة
    شركة جلي بلاط بالمدينة المنورة
    شركتنا شركة جلي بلاط رخام بالمدينة المنورة تقوم على العمل علي جلي وتلميع البلاط الذي يتم صنعه من الرخام هو مجال عمل شركتنا شركة جلي بلاط والرخام وتلميع وتنظيف السيراميك بالمدينة المنورة ،حيث تعتمد شركتنا على الأجهزة والمعدات الحديثة التي تعطي للرخام اللمعان والجمال الرائع ، ويصنع بلاط الرخام دائما من نوع من الأحجار الجيدة والقوية التي لا تتأثر باحتكاكه ،وهو من الممكن أن تحمل الاصطدام واختلاف درجات الحرارة والرطوبة و يتم تلميعه بأجهزة مميزة ومعدات نستخدمها بالليزر وأدوات خاصة بشركتنا شركة جلي بلاط بالمدينة ،لأننا نقوم بكل ما علينا حفاظا على أرضيات بيوتكم لامعة وجميلة باستخدام أفضل الأدوات الخاصة بالعمل علي جلي الرخام في العالم والتي تعطي لشركتنا شركة جلي البلاط بالمدينة المنورة والتي تمتلك التميز والجودة ، يعتبر بلاط الرخام من أهم مكونات الأرضيات للبيوت و المنازل والقصور والشقق في الوقت الحاضر ، إضافة إلى السيراميك والبور سيلين ، والمحافظة عليها يجب علي العملاء الاستعانة بشركة رائدة ومتخصصة في تلميع وجلي البلاط والرخام .
    أسباب اختيار شركتنا

    شركة جلى رخام بالمدينه المنوره

    شركة جلى بلاط بالمدينه المنوره

    شركة تلميع سيراميك بالمدينه المنوره

  31. شركة رش مبيدات حشريه ومكافحة حشرات بالمدينة المنورة
    ارخص شركات مكافحة و رش الحشرات بالمدينة المنورة
    ارخص شركة رش مبيدات حشريه ومكافحة حشرات بالمدينة المنورة
    شركتنا ارخص شركات مكافحة و رش الحشرات بالمدينة المنورة – قتل حشرات ابادة حشرات القضاء على الحشرات كل هذا تجده عندنا فقط نحن شركة مكافحة حشرات بالمدينة المنورة تستخدم افضل المبيدات المرخصه من وزارة الصحه والتى ليس لها اى رائحه او اضرار على صحه الانسان العامه و يؤكد انه من المعروف ان شركة رش حشرات بجده تعلم ان للحشرات لها اثار ضارة وشديدة الضرر وخاصة اماكن وجودها لما بها من الميكروبات والبكتريا والجراثيم والكثير والكثير من الامراض فتؤدى الى حدوث امراض خطيرة مثل امراض الجلد وامراض الكبد وغيرها من الامراض الخطيرة حيث انها لا تكتفى بذلك ولكن تتسبب ايضا فى نقل الامراض عن طريق العدوى وامراض الحشرات كثيرة ومتنوعة حيث ان اكثر الامراض الخطيرة نتاج الحشرات وكذلك ايضا الجراثيم التى تسبب فى امراض بالغة فى المعدة وفى الانف وغيرها وحيث يوجد الاهتمام الكامل لدينا فى حين اننا مؤسسة خدمية الهدف منها الاهتمام والرعاية الكاملة والجودة العالية فى تقديم الخدمة حتى نحصل علي رضا عميلنا العزيز حيث اننا نستخدم أفضل التقنيات الحديثة فى مجال مكافحة الحشرات ويوجد عندنا ايضا فريق عمل مجهز على اعلى المستويات لمكافحة تلك الحشرات والتخلص منه نهائيا وبدون اى اثار جانبية قد تؤدى الى الاضرار بصحة عملائنا الكرام .

    شركة مكافحة حشرات بالمدينه المنوره

    شركة رش حشرات بالمدينه المنوره

  32. a
    نحن في شركة تنظيف خزانات بالمدينة المنورة نعمل علي القيام بتنظيف كل انواع الخزانات مهما كانت احجامها كبيرة او صغيرة وذلك لاننا نمتلك الخبرة الكاملة لتنظيف كل انواع الخزانات باستخدام أفضل الطرق حيث نقوم بسحب جميع مياه الخزان ثم نقوم بالقضاء علي الرواسب التي توجد بالخزان باستخدام السبل والطرق الجديدة ثم نقوم بنظافة وغسيل حوائط وجدران كل الخزانات , ارضية الخزانات, اسقف الخزانات باستعمال أفضل انواع المنظفات التي لا تتفاعل مع مياه الخزان ابدا , وبعد ذلك نقوم بتعقيم الخزانات بطريقة سليمة عن طريق مواد التعقيم التي نعرفها جيدا والامنة على الخزانات وذلك لضمان تنظيف الخزان ولضمان ان يبقى امناً ويصلح لوضع المياه به واستعمالها
    عزل الخزانات

    شركة تنظيف خزانات بالمدينة المنورة
    شركة تنظيف خزانات بالمدينة المنورة
    شركة تنظيف خزانات بالمدينة المنورة
    و عزل الخزانات هو بناء عازل على جدار الخزانات لمنع تسربات المياه, وعدم عزل الخزانات يتسبب في جعل الخزانات موسخة اكثر من المعدل الطبيعي لها وذلك لان تسريب المياه التي يتعرض اليها الخزان تؤدي الى كبر البكتيريا على جوانب الخزانات التي تؤدي الى الاصابة بالعديد من الامراض عند استعمال مياه هذه الخزان ولكن شركتنا شركة تنظيف خزانات بالمدينه مهمتها في الحفاظ على صحتك وصحة عائلتكم لذلك نقوم بتقديم الخدمات الخاصة بعزل الخزانات بالمدينة المنورة تتم عن طريق عمال يمتلكون الخبرة الطويلة في عزل الخزانات وعلى علم تام بالطريقة السليمة التي تناسب العملاء فيقومون بعزل الخزانات دون حدوث اي اصابات للخزانات باي تلف او ضرر فنحن شركة عزل خزانات بالمدينة المنورة نضمن لك خزانات سليمة عن الاستعانة باي خدمة في الخزانات سواء نظافة وغسيل خزانات او عزل خزانات, نقوم باستخدام مواد عازلة متميزة تتحمل كل درجات الحرارة المتنوعة التي تتعرض لها المملكة العربية السعودية اي تلك المواد الجيدة التي تمنع تسريبات المياه بشكل نهائي وبالتالي يمكنك الحفاظ على تنظيف الخزانات الى اطول وقت ممكن والحفاظ عليها من نمو الجراثيم والفطريات لان تسريبات المياه تتسبب في ان من الممكن يتم اتساخ الخزانات اكثر من الممكن فالطبيعي انه يجب ان تقوم بنظافة الخزانات مرة كل ثلاثة اشهر او حسب رؤيتك ومرادك ولكن بسبب تسريبات المياه داخل وخارج الخزانات سوف تقوم نظافة الخزانات كل فترة صغيرة من الزمن وسوف تكون خسارتك فادحة من الناحية المادية وستخسر الكثير .
    اسعار الشركة

    شركة تنظيف خزانات بالمدينه المنوره
    شركة صيانة خزانات بالمدينه المنوره
    شركة اصلاح خزانات بالمدينه المنوره

  33. تستخدم افضل المنتجات في النظافة وكذلك تعالج وتزيل اصعب البقع سواء على الارضيات او السجاد او المفروشات او الستائر باحدث الاجهزه- فى مقابل الاسعار المتواجده فى الاسواق
    معالجة جميع أنواع "الباركية , الرخام ,الفينيل, الارضيات , السيراميك , الجرانيت " وغيرها.
    تقديم شركة تنظيف منازل بالرياض كل الخدمات المنزليه لكل
    شركة تنظيف شقق
    شركة تنظيف فلل
    شركة تنظيف مساجد
    شركة تنظيف موكيت بالرياض
    شركة تنظيف منازل
    شركة تنظيف بيوت
    شركة تنظيف وغسيل مجالس و كنب
    شركة تنظيف وغسيل فرشات وموكيت
    شركة تسليك مجاري
    شركة مكافحه حشرات مع الضمان
    شركة نقل عفش مع الفك والتركيب والتغليف والتخزين والضمان

    شركة تنظيف فلل بالرياض
    شركة تنظيف منازل بالخرج
    شركة تنظيف مساجد بالرياض
    شركة تنظيف مساجد بالخرج
    شركة تنظيف وصيانة مسابح بالرياض
    شركة شفط بيارات بالخرج وبالرياض
    شركة تسليك مجارى بالرياض

  34. عندما يتعلق الامر بمكافحة الحشرات فلا مجال للاستهانه به لما له من اثر مباشر علي صحة الفرد والاسره بصفه عامه
    حيث ان وجود او مجرد ظهور الحشرات بالمنزل يؤدي الي انتشار الامراض بالاضافه الي الخسائر الاقتصاديه التي تخلفها ايضا
    لذا كان من الواجب علينا ضمان عدم ظهور تلك الحشرات مره اخري بعد مكافحتها حيث نوفر لك عميلنا العزيزي افضل
    شركات مكافحة حشرات بالخرج
    شركات رش مبيدات بالخرج
    مع ضمان عدم ظهور تلك الحشرات كل ما عليك هو التواصل معنا

  35. گروه تولیدی بازرگانی ال ای دی پانل با دارا بودن سابقه درخشان در زمینه واردات از کشور های مختلف و نیز تولید انواع تابلو روان و تلویزیون شهریتبلیغاتی ، با به کاری گیری نیروی متعهد و متخصص با هدف ارائه خدمات بازرگانی و تولیدی فعالیت می نماید که واحد بازرگانی ال ای دی پانل با دارا بودن شرکای تجاری معتبر در کشورهای چین ، تایوان و کره جنوبی اقدام به واردات کالاهای الکترونیکی من جمله قطعات تابلو روان ، قطعات تلویزیون شهریو تجهیزات نور پردازی با بهترین کیفیت و مناسب ترین قیمت مینماید و نیز واحد تولید ال ای دی پانل فعالیت خود را در زمینه ساخت و تولید انواع تابلو روان و نمایشگر شهری LED با مشخصات مختلف و نیز تولید انواع قاب تابلو روان ، کابینت تابلو روان led و کابینت تلویزیون شهریمی نماید.

  36. شما به هر حرفه ای که مشغول باشید، حتما به این موضوع فکر کرده اید که چقدر خوب بود که اگرفن بیان خوبی داشتید، اینکار را ما به راحتی به شما آموزش میدهیم فن بیان در واقع میزان نفوذ سخن شما در افراد را شامل می شود. یعنی اینکه صحبتهای ما به چه میزان در افراد اثرگذار خواهد بود. هنگامی که از فن بیان خوبی برخوردار نباشیم مدام نادیده گرفته می شویم و همین امر موجب می شود که اعتماد به نفس خود را از دست داده و دچار اضطراب گردیم. برای بهبود فن بیان روش های گوناگونی وجود دارد که هریک از این روشها از جنبه های گوناگون مورد سنجش و بررسی قرار گرفته است. ارتباط چشمی ، لبخند زدن و اشتیاق برخی از این راهها می باشد.

  37. افرادی که تصور می‌کنند اعتماد به نفس پایینی دارنددر برخی از این موارد ضعیف هستند نه در تمام این موارد.بااین‌حال می‌خواهم خبر خوبی بدهم: اعتماد به نفسکاملاً اکتسابی است و می‌توان آن را با روش‌هایی دوباره احیا کرد و آن را تقویت کردیکی از بهترین راهکارها برای افزایش اعتماد به نفساین است که در محیطی باشید که بتوانید زمینه‌هایمختلف توانمندی‌های خود را کشف کنید.