একটি ঘোরানো লিসাজাস চিত্রটি অ্যানিমেট করুন


15

এই চ্যালেঞ্জের জন্য এন্ট্রিগুলি অ্যানিমেটেড ঘোরানো লিসাজাস চিত্রটি প্রদর্শন করবে । এক্স প্যারামিটার প্রতিটি ফ্রেমে ক্রমান্বয়ে পর্যায়-স্থানান্তরিত হওয়ায় 3 ডি রোটেশনের উপস্থিতি ঘটে।

ইনপুট:

aএবং b(প্রতি যেমন পরামিতি Wikipedia নিবন্ধটি ) কমান্ড লাইনে উল্লেখ করা হবে, অথবা stdin থেকে পড়া।

আউটপুট:

এটি , সুতরাং আউটপুটটি টার্মিনাল এমুলেটর উইন্ডো বা সমমানের মধ্যে প্রদর্শিত হবে। আউটপুট আকার হার্ডকোডযুক্ত হতে পারে, তবে 80x24 উইন্ডোটি পূরণ করার জন্য লিসাজাস চিত্রটি কমপক্ষে যথেষ্ট বড় হতে হবে।

অ্যানিমেশন ফ্রেমের হার প্রায় 50fps হবে be প্রতিটি ফ্রেমের মধ্যে 20 মিমি পর্যন্ত ঘুমানো ঠিক থাকে, যতক্ষণ না প্রতিটি ফ্রেমের গণনা করার সময় স্থির ঘুমের সময়ের সাথে তুলনা করা কম হয়। যদি আপনার ভাষা চয়ন আপনার চয়ন করা প্ল্যাটফর্মে দ্রুত তা গণনা করতে না পারে, তবে আপনাকে গতিশীলভাবে ঘুমানোর সময় গণনা করতে হবে।

সেই ফ্রেমের জন্য সমস্ত গণনা শেষ না হওয়া পর্যন্ত প্রতিটি ফ্রেম প্রদর্শিত হবে না। প্রতিটি ফ্রেমের মধ্যে পর্দা সাফ করার দরকার নেই।

চিত্রটি 2*Piপ্রতি 4 সেকেন্ডে পুরো ঘূর্ণায়মান হবে ।

প্রতিটি ফ্রেমের জন্য একটি সম্পূর্ণ বদ্ধ বাঁক উত্পন্ন করা আবশ্যক। কমপক্ষে 1000 পয়েন্টগুলি বক্ররেখার সাথে গণনা করতে হবে। পয়েন্টগুলির মধ্যে লাইন-অঙ্কন প্রয়োজনীয় নয়।

বক্ররেখার পয়েন্টগুলি #অক্ষর হিসাবে প্লট করা হবে । ডিসপ্লে ক্ষেত্রের বাকি অংশটি ফাঁকা / সাদা স্থান হবে।

এটি , সুতরাং বাইটের সংক্ষিপ্ত উত্তর (আমার গ্রহণযোগ্য বলে মনে করা হয়) এই পোস্টের এক সপ্তাহ পরে গ্রহণযোগ্য বিজয়ী হবে।


অব্যক্ত রেফারেন্স উত্তর


1
গ্রাফিক্স-ওরিয়েন্টেড ভাষা ব্যবহার করে আমাদের কী এটি আঁকার অনুমতি দেওয়া হচ্ছে?
TheDoctor

@ ডক্টর আমি এতে ছিঁড়ে গিয়েছিলাম, তবে সিদ্ধান্ত নিয়েছিলাম এসকি -আর্টে সীমাবদ্ধ । এটি যদি জনপ্রিয় হয়ে যায় তবে সম্ভবত আমরা একটি গ্রাফিকাল-আউটপুট অনুসরণ করতে পারি ।
ডিজিটাল ট্রমা

1
অনেক ঘোরানো পরিসংখ্যানের মতো, এই চিত্রগুলি আপনি কীভাবে দেখেন তার উপর নির্ভর করে বিভিন্ন উপায়ে ঘোরান। উদাহরণস্বরূপ, আপনার উত্তরটি আমার কাছে বার বার দুলছে। তবে আমি যখন চেষ্টা করি তখন আমি নিয়মিত ঘূর্ণন দেখতে পাই।
জাস্টিন

উত্তর:


7

পার্ল - 177

while($d+=.1){print"\e[H\e[2J";$a=0;while(($a+=.01)<4*atan2 1,0){$x=$==40+40*cos$d+$a*$ARGV[0];$y=$==13+13*sin$d+$a*$ARGV[1];print"\e[$y;$x"."H#";}print$/;select($v,$v,$v,.03);}

গুণফলগুলি আর্গুমেন্টের মাধ্যমে পাস করা হয়। উপরের জিআইএফ থেকে উত্পাদিত হয়perl % 2 3



7

সি (রেফারেন্সের উত্তর - গল্ফড নয়)

এর সাথে আউটপুট ./lissajous 2 3:

এখানে চিত্র বর্ণনা লিখুন

/*
 * lissajous.c
 *
 * Compile with:
 *   cc lissajous.c -lm -o lissajous
 *
 * Usage:
 *   ./lissajous a b
 *
 * a and b are the parameters as described in:
 * http://en.wikipedia.org/wiki/Lissajous_curve
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <unistd.h>

int main (int argc, char **argv) {
    char buffer[25][80];
    double t, p;
    int x, y;
    int a, b;

    if (argc != 3) return 1;

    a = atoi(argv[1]);
    b = atoi(argv[2]);

    for (;;) {
        for (p = 0; p < 2 * M_PI; p += M_PI / 100) {
            memset(buffer, ' ', sizeof(buffer));
            /* Set 1st char of final line to nul.  Then we can printf
             * the whole 2d array as if it were one long 1d buffer.
             * Line wraps at 80 chars are assumed */
            buffer[24][0] = 0;
            for (t = 0; t < 2 * M_PI; t += M_PI / 500) {
                x = 39.5 * (1 + sin(a * t + p));
                y = 11.5 * (1 + sin(b * t)); 
                buffer[y][x] = '#';
            }
            printf("%s\n", &buffer[0][0]);
            usleep(20000);
        }
    }
    return (0);
}

সি, 257 বাইট

ঠিক আছে, আমি নিজেও এটি কিছুটা গল্ফ করা প্রতিরোধ করতে পারি না। আমি মনে করি এটির জন্য আরও অনেক গল্ফ করার দরকার আছে যদিও:

#include<math.h>
main(int a,char**v){char x,y,b,d[25][80];double t,p,q=2*M_PI;a=atoi(v[1]);b=atoi(v[2]);for(p=0;memset(d,32,2000);p+=q/100){p=p<q?p:0;d[24][0]=0;for(t=0;t<q;y=11.5*sin(b*t)+12,d[y][x]=35,t+=q/1e3)x=39.5*sin(a*t+p)+40;puts(d);usleep(20000);}}

2
মজার বিষয় কীভাবে রেফারেন্স উত্তরটি বাড়ছে ...
TheDoctor

@ ডক্টর আমি জানি, ঠিক আছে। আমি কেন একটি গল্ফযুক্ত সংস্করণ যুক্ত করে শেষ করেছি, কারণ এটি একটি নিরবচ্ছিন্ন উত্তরের জন্য উর্ধ্বতন পাওয়া ঠিক মনে হয়নি।
ডিজিটাল ট্রমা

যদি আপনি usleep20000 মিমি ইনগ ইন করছেন তবে কেন কেবল sleep20 এর দশকের জন্য নয় ?
ব্যবহারকারী 12205

@ অতিরিক্ত ইউএসপ (20000) == 20000 মাইক্রো সেকেন্ড, 20000 মিলি সেকেন্ড নয়
ডিজিটাল ট্রমা

উফ, দুঃখিত, আমার খারাপ। কি হবে usleep(2e4);?
ব্যবহারকারী 12205

2

পাইথন 3 - 280

হ্যাঁ, এই জন্য অভিনব অ্যানিমেটেড জিআইফগুলির মধ্যে একটিও নেই। উইন্ডোজ কনসোল প্রিন্টিংয়ে ধীর: পি

এটি 50fps প্রয়োজনীয়তা পূরণ করে তা নিশ্চিত না যদিও পাইথনের মাধ্যমে এটি সত্যই সম্ভব তা আমি নিশ্চিত নই। গণনা করার জন্য পয়েন্টের পরিমাণের জন্য আপনি দ্বিতীয় লাইনে 1000 টি সামঞ্জস্য করতে পারেন (তালিকাটি আউটপুট প্রস্থ, আউটপুট উচ্চতা, সন্ধানের পয়েন্ট, ফ্রেম প্রতি অগ্রগতি (পিআই * 2 / এন) এবং প্রারম্ভিক পয়েন্ট)। অথবা আপনি এগুলি মুছে ফেলতে পারেন এবং ইনপুটটিতেও নির্দিষ্ট করতে পারেন।

import math as m
a,b,w,h,p,r,t=list(map(int,input().split()))+[79,24,1000,100,0]
while 1:v,z=w/2,h/2;d=[[int(m.sin(a*k+t)*v+v),int(m.sin(b*k)*z+z)]for k in[m.pi*2/p*l for l in range(p)]];print('\n'.join(''.join([' ','#'][[i,j]in d]for i in range(w))for j in range(h)));t+=m.pi*2/r

আরও গুরুত্বপূর্ণ সম্পাদনা: স্টিডিনের মাধ্যমে ইনপুট, স্পেস-বিচ্ছিন্ন, নিউলাইন সমাপ্ত। আপনার ইনপুট জন্য অপেক্ষা করবে।

সম্পাদনা: স্ক্রিনশট। এটির জন্য উচ্চতা 40 এ পরিবর্তন করা হয়েছে।

লিসাজাস রেন্ডারিং


হুম, এটি কেবল উবুন্টুতে পাইথন ৩.২.৩ (এবং ২.7.৩) দিয়ে আমার জন্য স্তব্ধ। আমার ধারণা আমি কোথাও থেকে একটি উইন্ডোজ ভিএম খনন করতে হবে। বা অজগর শিখুন।
ডিজিটাল ট্রমা

নিবন্ধন করুন আমি ৩.৩.২ চালাচ্ছি। অদ্ভুত যে এটি কাজ করে না যদিও, আমার কোডে কোনও প্ল্যাটফর্ম-নির্দিষ্ট পদ্ধতি দেখতে পাবেন না।
সিজেফুরে 21

হিসাবে সংরক্ষণ করুন lissajous.py, তাহলে রান python3 lissajous.py 2 3যথেষ্ট হবে, তাই না?
ডিজিটাল ট্রমা

@ ডিজিটালট্রামা ওহ, ওহ, দুঃখিত এটি ইনপুট নেয় stdin, আরগস থেকে নয় (এটি ... ওফ নির্দিষ্ট করতে ব্যর্থ হয়েছে)। শূণ্যস্থান দ্বারা বিভাজিত,।
সিজেফুরে

আহা - আমি অনুমান করি আমার এটি দেখে input()এবং অনুমান করা উচিত ছিল । আমার সাথে এখন 3.2.3 দিয়ে ভাল কাজ করে। +1
ডিজিটাল ট্রমা

1

সি # - 360 352 (ক্রস প্ল্যাটফর্ম - শুধুমাত্র উইন্ডোজের জন্য 332)

মাইক্রো-গল্ফিং এবং রাউন্ডিং বাগ ফিক্স + Ypnypn দ্বারা পরামর্শের পরে সম্পাদিত

এই দৈর্ঘ্যের প্রতিদ্বন্দ্বী ঠিক নয় - এবং এটি অনেকটা রেফারেন্সের ভারব্যাটিম কপি - তবে ওহ ভাল। :)

namespace System{class P{static int Main(string[]m){double p=Math.PI*2,a=int.Parse(m[0]),b=int.Parse(m[1]),q,t;for(;;)for(q=0;q<p;q+=p/200){var s=new string(' ',1920).ToCharArray();for(t=0;t<p;t+=p/1000)s[(int)(39.5*Math.Sin(a*t+q)+40)+(int)(11.5*Math.Sin(b*t)+12)*80]='#';Console.SetCursorPosition(0,0);Console.Write(s);Threading.Thread.Sleep(20);}}}}

মেমরি হগ, প্রতিটি রিফ্রেশের জন্য একটি নতুন অ্যারে তৈরি করে - মূলত (পুনরায়) একটি স্ট্রিংবিল্ডার ব্যবহার করে, তবে সংক্ষিপ্ততার জন্য এটি উত্সর্গ করে। তবে কমপক্ষে রিফ্রেশটি আমার পুরানো কোর 2-তে 1 এমএসেরও কম সময় নেয়।

কিছু - এখন দৈর্ঘ্য-ক্ষতিকারক - পুরানো গল্ফিং অপসারণের পরে এটি 8 টি অক্ষর দ্বারা হ্রাস করার পরে, আমি এটি ইন্টি পার্সিংয়ের পরিবর্তে দ্বিগুণ হয়ে আবার 1920 এর পরিবর্তে 80 * 24 এ ফিরে "কাব্যিক" 360 এ ফিরে আসার চেষ্টা করেছি। এটি এখনও কেবল 359, যদিও - এবং আমি মনে করতে পারি এমন কোনও একক অক্ষর সংযোজন কোডটিতে সত্যই কোনও মান যুক্ত করে না। সুতরাং আমরা কেবল 352 দিয়ে থাকব। :-)

নিবন্ধভুক্ত (প্রি-গল্ফ কোডটি হারিয়েছে):

namespace System
{
    class P
    {
        static int Main(string[] m)
        {
            double p = Math.PI * 2,
                   a = int.Parse(m[0]),
                   b = int.Parse(m[1]),
                   q, t;

            for (;;)
            {
                for (q = 0; q < p; q += p/200)
                {
                    var s = new string(' ', 1920).ToCharArray();
                    // Alternative - Windows console only:
                    // var s = new char[1920];

                    for (t = 0; t < p; t += p/1000)
                    {
                        s[
                            (int) (39.5*Math.Sin(a * t + q) + 40)
                          + (int) (11.5*Math.Sin(b * t) + 12) * 80
                        ] = '#';
                    }
                    Console.SetCursorPosition(0, 0);
                    Console.Write(s);
                    Threading.Thread.Sleep(20);
                }
            }
        }
    }
}

উইন্ডোজ কনসোলটি আসলে অনেকগুলি নাল অক্ষরের আউটপুট গ্রহণ করে যার ফলস্বরূপ আউটপুট (গ্রাফিকালি) প্রকৃত স্থান অক্ষর ব্যবহারের অনুরূপ - যা কয়েকটি অক্ষরকে কম অক্ষরের অক্ষর আরম্ভ করতে দেয় less

কোনও অভিনব অ্যানিমেশন নেই, দুঃখিত :-)


উইন্ডোজ কনসোলটি আসলে অনেকগুলি নাল অক্ষরে আউটপুটিং গ্রহণ করে । আহ সম্ভবত এটি ব্যাখ্যা করে যে এটি কেন উবুন্টুতে মনো মনোভাবের সাথে এত ভাল হয় না। আমার এখনই উইন্ডোজ /। নেট হ্যান্ডি নেই, সুতরাং আমি আপনার শব্দটি এটির জন্য গ্রহণ করব it
ডিজিটাল ট্রমা

কেবল একটি স্ক্রিনশট যুক্ত করেছে - এটিকে ক্রস প্ল্যাটফর্ম তৈরি করা উচিত, তবে এটি ইতিমধ্যে থাকা প্রতিযোগী না হওয়ার স্থিতি বিবেচনা করে - এবং "কাব্যিক" চরিত্রের সংখ্যা, সম্ভবত এটি ঠিক যেমন রেখে দেওয়া উচিত। :-)
JimmiTh

সমস্ত উত্তর ক্রস প্ল্যাটফর্মের আইএমও হওয়ার দরকার নেই। উত্তরগুলি যদি প্ল্যাটফর্ম-নির্দিষ্ট হয় তবে প্ল্যাটফর্মটি উল্লেখ করা ভাল, যদিও সি # এতটাই সুপরিচিত যে এটি ইতিমধ্যে সুস্পষ্ট।
ডিজিটাল ট্রমা

না using C = Consoleসত্যিই কোন অক্ষর সংরক্ষণ করবেন?
Ypnypn

@Ypnypn - সিস্টেম নেমস্পেস আক্রমণ করার পরে নয়, না। এটি পরিবর্তন করেনি, বা এটি সন্ধান করেন নি, কারণ "যথাযথ" চর অ্যারে আরম্ভকরণ ব্যবহার করার সময় স্ব-বর্ণিত লক্ষ্যটি একই 360 টি অক্ষরে পৌঁছানো ছিল। ধন্যবাদ। :-)
জিমিথ

1

পাইথন 2.7 - 214

আমি মনে করি আমি এ সম্পর্কে আরও একবার নজর রাখব। আমার আরও বোধ হয় এটিকে আরও নিচে নামানো যেতে পারে তবে পার্ল বাইট গণনাতে আঘাত করা শক্ত হবে। অঙ্কটি এখানে আমার বৃহত্তম সীমাবদ্ধ বলে মনে হচ্ছে।

সতর্কতা: আপনি যে টার্মিনালটি ব্যবহার করছেন তা ক্র্যাশ হতে পারে। আমি উইন্ডোজ কমান্ড প্রম্পটে এটি পরীক্ষা করেছি lissajous.py 2 3। কমান্ড প্রম্পটে দ্রুত লেখার কারণে, ফ্রেমগুলি কিছুটা লাফিয়ে উঠবে বলে আশা করি। অধিকাংশ ক্ষেত্রে এই অধিক ব্যবহার করে (গতি খরচে) সমাধান করা যেতে পারে sযে range(s)এবং t=2*pi*i

আমি এটি \rবা \bএখানে উদ্দেশ্যমূলক ব্যবহার করি না কারণ আমি এটি উইন্ডোতে চালাচ্ছি এবং এটির জন্য অতিরিক্ত অক্ষর লাগবে।

from math import*;import sys;a,b=sys.argv[1:];p=s=1920
while p:
 c = [" "]*s
 for i in range(s):
    t=2*pi*i/s;c[int(round((39.5*(1+sin(eval(a)*t+p))))+round(11.5*(1+sin(eval(b)*t)))*80)]="#"
 print ''.join(c)
 p+=.1

+1 উবুন্টুতে কাজ করে, যদিও আউটপুটটি খানিকটা ঝাপটায়
ডিজিটাল ট্রমা

@ ডিজিটালট্রামা হ্যাঁ এলোমেলো হওয়ার কারণ এটি ক্রস প্ল্যাটফর্ম সমাধান হয়ে থাকে (যেমন উইন্ডোজ কমান্ড প্রম্পটটিতে কাজ করা)।
গ্রোভসএনএল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.