FM'e göster: AWK ile küre boyamak

6
auselen

Abartıp tek satır demeyeceğim ama, AWK ile üç boyutlu küre boyamaca.

LC_ALL=ISO-8859-1 awk 'BEGIN{ \
  pi=atan2(0, -1); r=126; \
  for (j=0; j<360; j+=10) { \
    lx=cos(pi/180*j); ly=sin(pi/180*j); lz=2; lm=sqrt(lx*lx+ly*ly+lz*lz); \
    print "P6"; print "256 256"; print "255"; \
    for (y=-128; y<128; y++) \
      for (x=-128; x<128; x++) \
        if (x*x+y*y < r*r) { \
          z=sqrt(r*r-x*x-y*y); a=(x*lx+y*ly+z*lz)/(r*lm); \
          printf "%c%c%c",((a>0)?int(a*256):0),0,0 \
        } else printf "%c%c%c",0,0,0 \
  }}'\
| convert -delay 8 - sphere.gif

(Resmin boyutu için özür diliyorum, orjinal boyutu daha makul olmakla beraber, burada nasıl küçültülebilir bulamadım.)

file

Meraklısı için:

Kürenin üzerindeki herhangi bir noktadan geçen yüzey vektörünün ışık vektörüyle yaptığı açı ilgili pikselin değerini belirliyor. Yüzey vektörü de zaten küre üzerindeki noktanın konumu (yani x-y-z'si). Işık vektörü ile noktadan geçen vektörü nokta çarpımı yapıp, mutlak değerlerinin çarpımlarına bölerek bu değeri bulabiliyoruz.

file

Gerisi de aşağıdakilere takla attırmaktan ibaret:

AWK + PPM + ImageMagick

Görüşler

2
FZ

Hipnotize oldum sabah sabah! :)

2
tongucyumruk

Ellerine saglik. Uzun zamandan beri gördugum en guzel hacklerden biri.

3
redogre

x = 16sin^3t
y = 13cost-5cos(2t)-2cos(3t)-cos(4t)

bu denklemi uygalayabilir miyiz acaba bu programa?

2
auselen

aynisi aklimdan gecti az once, birazdan yaparim :)

1
redogre

:) hatta haber olarak alalım günün ehemmiyetine özel :)

1
butch

İmece bir fm-kare çıkar buradan

Görüş belirtmek için giriş yapın...

İlgili Yazılar

3D yazıcı ne değildir

redogre

Bundan iki yıl önce Çin'den kit halinde prusa i3 varyantı bir 3d yazıcı aldım. Hayal etmediğim birçok şey yaparken hayal ettiğim birçok şeyi de yapamadım.

Bu yazıda 3d yazıcı nedir kısmından çok, ne değildir ondan bahsetmek istiyorum. İnternet hepimizin ağzının suyunu akıtan 3d yazıcı güzellemeleriyle dolu iken bu aletin kısıtlamalarını anlatan çok az yazı var.

Öncelikle çeşitli kickstarter...

FM'e göster: ♡

auselen

Programcılar için ucuz sevgililer günü önerileri...

  • t = 0 2𝜋
  • x = 16 sin³ t
  • y = 13 cos t - 5 cos (2 t) - 2 cos (3 t) - cos (4 t)
LC_ALL=ISO-8859-1 awk 'BEGIN { \  pi=atan2(0, -1); \  for (t=0; t<(pi*2); t+=pi/180) { \  print "P6"; print "256 256"; print "255"; \  if (t==0) { \  for (i=0;i<256*256;i++) \  printf "%c%c%c",128,0,128; \  continue...