একটি স্কেলযোগ্য ক্রিসমাস ট্রি তৈরি করুন [বন্ধ]


95

আপনার চ্যালেঞ্জ: একটি ক্রিসমাস ট্রি তৈরি করুন। আকারটি অবশ্যই কিছু ইনপুট পদ্ধতিতে চয়নযোগ্য হতে হবে তবে গাছের কোনও অংশের সাথে সরাসরি সম্পর্কিত হতে হবে না; তবে বৃহত্তর ইনপুটগুলি একটি বৃহত গাছ তৈরি করতে হবে।

আপনি এটি কিভাবে করতে পারেন? আপনি গাছটিকে আপনার যে কোনও উপায়ে তৈরি করতে পারেন, গাছের জন্য ইউনিকোড চরিত্র ছাপানো ছাড়া , যেমন কোনও চিত্রকে আউটপুট করা, এসকিআই আর্ট, অন্যান্য দিকগুলি ইত্যাদি etc. আপনি যা কিছু করেন না কেন, মনে রাখবেন এটি একটি , তাই সৃজনশীল হও.

ডিসেম্বরের শেষে সর্বাধিক উন্নতির সাথে উত্তর জিততে পারে, তবে আরও বেশি হলে আমি অন্যটিকে গ্রহণ করব


1
চমৎকার প্রশ্ন;)
টিমটেক

1
একটি করুণ সজ্জা বাধ্যতামূলক ছিল না!
o0 '

@ লহরিস আমি মনে করি এটি ভাল যে তারা বাধ্যতামূলক নয়। এইভাবে, লোকেরা যা চায় তাই করতে পারে এবং এই উজ্জ্বল ফ্র্যাক্টাল গাছগুলি বৈধ উত্তর।
জাস্টিন

@ কুইঙ্কনাক্স আপনি ভাঙা গাছ এমনকি সজ্জা যোগ করতে পারেন ...
o0 '।

@ লোহরিস হ্যাঁ, তবে তারা যথেষ্ট পরিমাণে। এই গাছগুলির লেখক চাইলে সজ্জা যোগ করতে পারে তবে আমার এটির প্রয়োজন হবে না।
জাস্টিন

উত্তর:


93

পাইথন

কচ্ছপ প্যাকেজ ব্যবহার করে একটি ফ্র্যাক্টাল ক্রিসমাস ট্রি:

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

n = input()*1.

from turtle import *
speed("fastest")
left(90)
forward(3*n)
color("orange", "yellow")
begin_fill()
left(126)
for i in range(5):
    forward(n/5)
    right(144)
    forward(n/5)
    left(72)
end_fill()
right(126)

color("dark green")
backward(n*4.8)
def tree(d, s):
    if d <= 0: return
    forward(s)
    tree(d-1, s*.8)
    right(120)
    tree(d-3, s*.5)
    right(120)
    tree(d-3, s*.5)
    right(120)
    backward(s)
tree(15, n)
backward(n/2)

import time
time.sleep(60)

n হল আকারের প্যারামিটার, দেখানো গাছটি এন = 50 এর জন্য। আঁকতে এক বা দুই মিনিট সময় নেয়।


2
এটি দেখতে সুন্দর :)
লাগছে

81

জাভাস্ক্রিপ্ট

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

অ্যানিমেটেড ট্রি অনলাইন দেখান ।

var size = 400;

var canvas = document.createElement('canvas');
canvas.width = size;
canvas.height = size;
document.body.appendChild(canvas);

var ctx = canvas.getContext('2d');

var p3d = [];

var p = [Math.random(), Math.random(), Math.random(), 0];

for (var i = 0; i < 100000; i++) {
    p3d.push([p[0],p[1],p[2],p[3]]);
    var t = Math.random();
    if (t<0.4) {
        _y = 0.4 * p[1];
        _x = 0.1 * p[0];
        _z = 0.6 * p[2];
        var r = Math.floor(3*t/0.4)/3.0;
        var rc = Math.cos(Math.PI*2.0*r);
        var rs = Math.sin(Math.PI*2.0*r);
        p[1] = _x+0.1*r+0.5*_y*_y;
        p[0] = _y*rc+_z*rs;
        p[2] = _z*rc-_y*rs;
        p[3] = 0.2*t + 0.8*p[3];
    } else {
        p[1] = 0.2 + 0.8*p[1];
        p[0] = 0.8 * p[0];
        p[2] = 0.8 * p[2];
        p[3] = 0.2 + 0.8*p[3];
    }
}

var rot = 0.0;

function render() {
    rot = rot + 0.1;
    var rc = Math.cos(rot);
    var rs = Math.sin(rot);

    ctx.strokeStyle='#FF7F00';
    ctx.lineWidth=2;
    ctx.beginPath();
    ctx.moveTo(size/2,size/8);
    ctx.lineTo(size/2,size*15/16);
    ctx.stroke();

    var img = ctx.getImageData(0, 0, size, size);
    for (var j = 0; j < size*size; j++) {
        img.data[4*j+0] = 0.5*img.data[4*j+0];
        img.data[4*j+1] = 0.5*img.data[4*j+1];
        img.data[4*j+2] = 0.5*img.data[4*j+2];
        img.data[4*j+3] = 255;
    }

    for (var i = 0; i < p3d.length; i++) {
        var px = p3d[i][0];
        var py = 0.5 - p3d[i][1];
        var pz = p3d[i][2];
        var col = Math.floor(128.0*p3d[i][3]);

        var _x = rc*px + rs*pz;
        var _z = rc*pz - rs*px;

        var z = 3.0 * size / (_z + 4.0);
        var x = size / 2 + Math.round(_x * z);        
        var y = size / 2 + Math.round(py * z);

        if(x>=0&&y>=0&&x<size&&y<size) {
            img.data[4 * (y * size + x) + 0] = col;
            img.data[4 * (y * size + x) + 1] = 128+col;
            img.data[4 * (y * size + x) + 2] = col;
            img.data[4 * (y * size + x) + 3] = 255;
        }
    }

    ctx.putImageData(img, 0, 0);
}

setInterval(render, 1000 / 30);

আমি এটি পছন্দ করি তবে আপনার একটি ট্রাঙ্ক যুক্ত করা উচিত।
Fels

1
@ ফিলস ট্রাঙ্ক যুক্ত করেছে
হাওয়ার্ড

2
এটি খুব চিত্তাকর্ষক, তবে গাছের চারদিকে ঘোরানো সবুজ পিক্সেলের কী হবে? আমি বুঝতে পারি নি যে সান্টায় উড়তে পারে এমন সবুজ ধনুচিহ্ন রয়েছে। (তারা আপনার উত্তরের সৌন্দর্য থেকে সরে আসে না, তবে আমি ভাবছি তারা কোথা থেকে এসেছে)
জাস্টিন

@ কুইনকুনস: এগুলি পুনরাবৃত্ত রূপান্তর হওয়ার আগে থেকেই প্রাথমিক নমুনা পয়েন্ট বলে মনে হচ্ছে। প্রথম 100 পয়েন্ট এড়িয়ে যাওয়া এগুলি থেকে মুক্তি পায়।
ইলমারি করোনেন

2
সত্যিই দুর্দান্ত, তবে এটি ক্রিসমাস গাছের মতো দেখতে বেশ লাগে না । এটি দেখতে আরও একটি কাঠির মতো দেখাচ্ছে যা এর সাথে কয়েকটি ফার্ন পাতা যুক্ত রয়েছে। এছাড়াও, আপনি কী ধীরে ধীরে y অক্ষের সাথে দৃশ্যটি স্ক্রোল করে তুলতে পারেন, তাই 3D- নেস আরও স্পষ্ট হয়?
দ্য হাটের সাথে গাই

76

ভিটালির উত্তরের উপর ভিত্তি করে আরও একটি গাণিতিক / ওল্ফ্রাম ভাষার গাছ :

PD = .5;
s[t_, f_] := t^.6 - f
dt[cl_, ps_, sg_, hf_, dp_, f_, flag_] :=
    Module[{sv, basePt},
           {PointSize[ps],
            sv = s[t, f];
            Hue[cl (1 + Sin[.02 t])/2, 1, .3 + sg .3 Sin[hf sv]],
            basePt = {-sg s[t, f] Sin[sv], -sg s[t, f] Cos[sv], dp + sv};
            Point[basePt],
           If[flag,
              {Hue[cl (1 + Sin[.1 t])/2, 1, .6 + sg .4 Sin[hf sv]], PointSize[RandomReal[.01]],
               Point[basePt + 1/2 RotationTransform[20 sv, {-Cos[sv], Sin[sv], 0}][{Sin[sv], Cos[sv], 0}]]},
              {}]
          }]

frames = ParallelTable[
                       Graphics3D[Table[{
                                         dt[1, .01, -1, 1, 0, f, True], dt[.45, .01, 1, 1, 0, f, True],
                                         dt[1, .005, -1, 4, .2, f, False], dt[.45, .005, 1, 4, .2, f, False]},
                                        {t, 0, 200, PD}],
                                  ViewPoint -> Left, BoxRatios -> {1, 1, 1.3}, 
                                  ViewVertical -> {0, 0, -1},
                                  ViewCenter -> {{0.5, 0.5, 0.5}, {0.5, 0.55}}, Boxed -> False,
                                  PlotRange -> {{-20, 20}, {-20, 20}, {0, 20}}, Background -> Black],
                       {f, 0, 1, .01}];

Export["tree.gif", frames]

বড়দিনের গাছ


7
এটি সেরা এক !!
মুর্তা

63

জাভাস্ক্রিপ্ট

প্রদত্ত কোড নমুনার আউটপুট

এটি আমার প্রথম কোড গল্ফ!

var a=40,b=8,c=13,o="<div style='font-family:monospace;text-align:center;color:#094'>",w=1,x=0,y="|#|<br>";for(i=1;i<a;i++){for(j=0;j<w;j++){x%c==0?o+="<span style='color:#D00'>O</span>":o+="+";x++;}i%b==0?w-=4:w+=2;o+="<br>";}document.write(o+"<span style='color:#640'>"+y+y+y+"</span></div>");

এটি 295 অক্ষর এ আসে।

গাছের আকার এবং প্রসাধন a, b, c ভেরিয়েবল দ্বারা সেট করা হয়েছে:

  • একটি গাছের মধ্যে সারিগুলির পরিমাণ নির্ধারণ করে
  • বি প্রস্থে হ্রাসের মধ্যে সারিগুলির পরিমাণ নির্ধারণ করে (একটি চর্মসার গাছের জন্য কম সেট করে, একটি চর্বিযুক্ত গাছের জন্য উচ্চ)। 3 এর চেয়ে বড় বা সমান হতে হবে।
  • সি বাউবলসের পরিমাণ নির্ধারণ করে (কোনওটির জন্য শূন্য সেট করে না, কেবল বাউবলের জন্য 1, বাউবলের কম ঘন বসানোর জন্য উচ্চতর সংখ্যা)

উদাহরণস্বরূপ, খ এর একাধিক হলে এটি সেরা দেখায়।

একটি গাছ তৈরি করতে কনসোলে আটকান। দেখতে অনেক দূরে থেকে!


1
264 এ পরিণত হয়েছেa=40,b=8,c=13,o="<p style='font:monospace;color:#094' align='center'>",w=1,x=0,y="|#|<br>";for(i=1;i<a;i++){for(j=0;j<w;j++){x%c==0?o+="<b style='color:red'>O</b>":o+="+";x++;}i%b==0?w-=4:w+=2;o+="<br>";}document.write(o+"<b style='color:#640'>"+y+y+y+"</b></p>");
ব্যবহারকারী 1886419

4
আপনি সত্যিই একটি জনপ্রিয়তা প্রতিযোগিতায় গল্ফ হয়? বাহ, আমি সুন্দর পঠনযোগ্য কোড লিখতাম (কোড করতে সহজ)। +1
জাস্টিন

7
ungh। আপনি ব্যবহার করছেন doc.write? আমার কাছ থেকে +1 নেই।
জন ডিভোরাক

2
@ জনডভোরাক, কেন নয়? আমি ভাবছিলাম এটি গল্ফ করছে .....
পেসারিয়ার

62

সি ++

আসুন এটি আইওসিসি-র স্পিরিটে তৈরি করুন এবং কোডটি একটি গাছের আকারেও রাখুন! : ডি

#include <iostream>
using namespace std;

               int
             main(){
              int a
                ; 
               cin
             >>a;int
           w=a*2+5;for
             (int x=
           0;x<a;++x){
         for(int y=2;y>=
       0;--y){for(int z=0;
           z<a+y-x;++z
        ){cout<<" ";}for(
     int z=0;z<x*2-y*2+5;++z
        ){cout<<".";}cout
      <<endl;}}for(int x=0;
    x<w/5+1;++x){for(int z=0;
  z<w/3+1;++z){cout<<" ";}for(
int z=0;z<w-(w/3+1)*2;z+=1){cout
           <<"#";}cout
           <<endl;;;}}

ইনপুট হিসাবে পূর্ণসংখ্যা নেয় এবং অনেকগুলি "স্ট্যাক স্তর" সহ একটি ক্রিসমাস ট্রি প্রদান করে। উদাহরণস্বরূপ, এর একটি ইনপুট

5

রিটার্নস:

       .
      ...
     .....
      ...
     .....
    .......
     .....
    .......
   .........
    .......
   .........
  ...........
   .........
  ...........
 .............
      ###
      ###
      ###
      ###

আউটপুট উদাহরণ?
জন ডিভোরাক

32
কোডটি আউটপুটের চেয়ে ক্রিসমাস গাছের মতো দেখাচ্ছে ...
Denys Séguret

2
রেকর্ডের জন্য অডিস্ট্রয়, নির্দেশাবলীটি বলে না যে এটি আউটপুট যা অবশ্যই গাছটি ধারণ করবে।
পিয়ের আরলাড

4
@ আরলাডপিয়ের: তবে আকারটি অবশ্যই নিয়মিত হতে হবে যা কেবল উত্স কোড দিয়ে অসম্ভব। আমি পারে একটি প্রোগ্রাম যা একটি ক্রিসমাস ট্রি যে আউটপুট আকৃতির প্রোগ্রাম কোড আউটপুট করতে প্রকৃত ক্রিসমাস ট্রি, কিন্তু আমি কল্পনা মাত্র সর্বত্র বিপথগামী সেমিকোলন ঢোকাতে অবলম্বন না যে ভয়ঙ্কর কঠিন।
জো জেড।

1
আপনি যদি *গাছের শীর্ষে (উত্স কোড) রাখেন তবে আপনার আমার +1 থাকবে 1
Fabricio

61

জাভাস্ক্রিপ্ট

Quasirealistic সম্পূর্ণরূপে 3 ডি পদ্ধতিগত ফার গাছ গাছ জেনারেটর।

বৈশিষ্ট্যযুক্ত: কোডে উপস্থিত আরও বেশি কনফিগারেশন বিকল্প সহ বিস্তৃত কনফিগারেশন; একটি জিগজিগি ট্রাঙ্ক; শাখা প্রশাখা; বৃদ্ধি অ্যানিমেশন; সম্পূর্ণরূপে উত্থিত গাছের আবর্তন।

বৈশিষ্ট্যযুক্ত নয়: jQuery, অ্যান্ডসकोर.জেএস বা অন্য কোনও লাইব্রেরি; হার্ডওয়্যার নির্ভরতা - কেবল ক্যানভাস সমর্থন প্রয়োজন; অগোছালো কোড (কমপক্ষে উদ্দেশ্য ছিল)

লাইভ পৃষ্ঠা: http://fiddle.jshell.net/honnza/NMva7/ শো /

পৃষ্ঠা সম্পাদনা করুন: http://jsfiddle.net/honnza/NMva7/

স্ক্রীনশট:

দেবদারূ গাছ

এইচটিএমএল:

<canvas id=c width=200 height=300 style="display:none"></canvas>
<div id=config></div>

javascript:

var TAU = 2*Math.PI,
    deg = TAU/360,

    TRUNK_VIEW      = {lineWidth:3, strokeStyle: "brown", zIndex: 1},
    BRANCH_VIEW     = {lineWidth:1, strokeStyle: "green", zIndex: 2},
    TRUNK_SPACING   = 1.5,
    TRUNK_BIAS_STR  = -0.5,
    TRUNK_SLOPE     = 0.25,
    BRANCH_LEN      = 1,
    BRANCH_P        = 0.01,
    MIN_SLOPE       = -5*deg,
    MAX_SLOPE       = 20*deg,
    INIT_SLOPE      = 10*deg,
    MAX_D_SLOPE     =  5*deg,
    DIR_KEEP_BIAS   = 10,
    GROWTH_MSPF     = 10, //ms per frame
    GROWTH_TPF      = 10, //ticks per frame
    ROTATE_MSPF     = 10,
    ROTATE_RPF      = 1*deg; //radians per frame

var configurables = [
//    {key: "TRUNK_SPACING", name: "Branch spacing", widget: "number",
//     description: "Distance between main branches on the trunk, in pixels"},
    {key: "TRUNK_BIAS_STR", name: "Branch distribution", widget: "number",
     description: "Angular distribution between nearby branches. High values tend towards one-sided trees, highly negative values tend towards planar trees. Zero means that branches grow in independent directions."},
    {key: "TRUNK_SLOPE", name: "Trunk slope", widget: "number",
     description: "Amount of horizontal movement of the trunk while growing"},
    {key: "BRANCH_P", name: "Branch frequency", widget: "number",
     description: "Branch frequency - if =1/100, a single twig will branch off approximately once per 100 px"},
    {key: "MIN_SLOPE", name: "Minimum slope", widget: "number", scale: deg,
     description: "Minimum slope of a branch, in degrees"},
    {key: "MAX_SLOPE", name: "Maximum slope", widget: "number", scale: deg,
     description: "Maximum slope of a branch, in degrees"},
    {key: "INIT_SLOPE", name: "Initial slope", widget: "number", scale: deg,
     description: "Angle at which branches leave the trunk"},
    {key: "DIR_KEEP_BIAS", name: "Directional inertia", widget: "number",
     description: "Tendency of twigs to keep their horizontal direction"},
    {get: function(){return maxY}, set: setCanvasSize, name: "Tree height",
     widget:"number"}
    ];

var config = document.getElementById("config"),
    canvas = document.getElementById("c"),
    maxX   = canvas.width/2,
    maxY   = canvas.height,
    canvasRatio = canvas.width / canvas.height,
    c;

function setCanvasSize(height){
    if(height === 'undefined') return maxY;
    maxY = canvas.height = height;
    canvas.width = height * canvasRatio;
    maxX = canvas.width/2;
x}

var nodes = [{x:0, y:0, z:0, dir:'up', isEnd:true}], buds = [nodes[0]],
    branches = [],
    branch,
    trunkDirBias = {x:0, z:0};

////////////////////////////////////////////////////////////////////////////////

configurables.forEach(function(el){
    var widget;
    switch(el.widget){
        case 'number':
            widget = document.createElement("input");
            if(el.key){
                widget.value = window[el.key] / (el.scale||1);
                el.set = function(value){window[el.key]=value * (el.scale||1)};
            }else{
                widget.value = el.get();
            }
            widget.onblur = function(){
                el.set(+widget.value);
            };
            break;
        default: throw "unknown widget type";
    }
    var p = document.createElement("p");
    p.textContent = el.name + ": ";
    p.appendChild(widget);
    p.title = el.description;
    config.appendChild(p);
});
var button = document.createElement("input");
button.type = "button";
button.value = "grow";
button.onclick = function(){
    button.value = "stop";
    button.onclick = function(){clearInterval(interval)};
    config.style.display="none";
    canvas.style.display="";
    c=canvas.getContext("2d");
    c.translate(maxX, maxY);                
    c.scale(1, -1);
    interval = setInterval(grow, GROWTH_MSPF);
}
document.body.appendChild(button);
function grow(){
    for(var tick=0; tick<GROWTH_TPF; tick++){
        var budId = 0 | Math.random() * buds.length,
            nodeFrom = buds[budId], nodeTo, branch,
            dir, slope, bias

        if(nodeFrom.dir === 'up' && nodeFrom.isEnd){
            nodeFrom.isEnd = false; 
            rndArg = Math.random()*TAU;
            nodeTo = {
                x:nodeFrom.x + TRUNK_SPACING * TRUNK_SLOPE * Math.sin(rndArg),
                y:nodeFrom.y + TRUNK_SPACING,
                z:nodeFrom.z + TRUNK_SPACING * TRUNK_SLOPE * Math.cos(rndArg), 
                dir:'up', isEnd:true}
            if(nodeTo.y > maxY){
                console.log("end");
                clearInterval(interval);
                rotateInit();
                return;
            }
            nodes.push(nodeTo);
            buds.push(nodeTo);
            branch = {from: nodeFrom, to: nodeTo, view: TRUNK_VIEW};
            branches.push(branch);
            renderBranch(branch);
        }else{ //bud is not a trunk top
            if(!(nodeFrom.dir !== 'up' && Math.random() < BRANCH_P)){
                buds.splice(buds.indexOf(nodeFrom), 1)
            }
            nodeFrom.isEnd = false; 
            if(nodeFrom.dir === 'up'){
                bias = {x:trunkDirBias.x * TRUNK_BIAS_STR,
                        z:trunkDirBias.z * TRUNK_BIAS_STR};
                slope = INIT_SLOPE;
            }else{
                bias = {x:nodeFrom.dir.x * DIR_KEEP_BIAS,
                        z:nodeFrom.dir.z * DIR_KEEP_BIAS};
                slope = nodeFrom.slope;
            }
            var rndLen = Math.random(),
                rndArg = Math.random()*TAU;
            dir = {x: rndLen * Math.sin(rndArg) + bias.x,
                   z: rndLen * Math.cos(rndArg) + bias.z};
            var uvFix = 1/Math.sqrt(dir.x*dir.x + dir.z*dir.z);
            dir = {x:dir.x*uvFix, z:dir.z*uvFix};
            if(nodeFrom.dir === "up") trunkDirBias = dir;
            slope += MAX_D_SLOPE * (2*Math.random() - 1);
            if(slope > MAX_SLOPE) slope = MAX_SLOPE;
            if(slope < MIN_SLOPE) slope = MIN_SLOPE;
            var length = BRANCH_LEN * Math.random();
            nodeTo = {
                x: nodeFrom.x + length * Math.cos(slope) * dir.x,
                y: nodeFrom.y + length * Math.sin(slope),
                z: nodeFrom.z + length * Math.cos(slope) * dir.z,
                dir: dir, slope: slope, isEnd: true
            }
            //if(Math.abs(nodeTo.x)/maxX + nodeTo.y/maxY > 1) return;
            nodes.push(nodeTo);
            buds.push(nodeTo);
            branch = {from: nodeFrom, to: nodeTo, view: BRANCH_VIEW};
            branches.push(branch);
            renderBranch(branch);
        }// end if-is-trunk
    }// end for-tick
}//end func-grow

function rotateInit(){
    branches.sort(function(a,b){
        return (a.view.zIndex-b.view.zIndex);
    });
    interval = setInterval(rotate, ROTATE_MSPF);
}

var time = 0;
var view = {x:1, z:0}
function rotate(){
    time++;
    view = {x: Math.cos(time * ROTATE_RPF),
            z: Math.sin(time * ROTATE_RPF)};
    c.fillStyle = "white"
    c.fillRect(-maxX, 0, 2*maxX, maxY);
    branches.forEach(renderBranch);
    c.stroke();
    c.beginPath();
}

var prevView = null;
function renderBranch(branch){
    if(branch.view !== prevView){
        c.stroke();
        for(k in branch.view) c[k] = branch.view[k];
        c.beginPath();
        prevView = branch.view;
    }
    c.moveTo(view.x * branch.from.x + view.z * branch.from.z,
             branch.from.y);
    c.lineTo(view.x * branch.to.x + view.z * branch.to.z,
             branch.to.y);
}

2
আমি জানি কারণ এই উত্তরের একটি মন্তব্য রয়েছে: কারণ এটি লোককে নির্বাক করে ফেলে।
ক্যারিডর্ক

49

সজোরে আঘাত

নমুনা আউটপুট:

এএসসিআইআই ক্রিসমাস ট্রি

গাছের আকার (অর্থাত্ লাইনের সংখ্যা) কমান্ড লাইনে উত্তীর্ণ হয় এবং 5 বা ততোধিক মানের মধ্যে সীমাবদ্ধ থাকে। উপরের চিত্রটি কমান্ড থেকে তৈরি হয়েছিল ./xmastree.sh 12। উত্স কোডটি এখানে:

#!/bin/bash
declare -a a=('.' '~' "'" 'O' "'" '~' '.' '*')
[[ $# = 0 ]] && s=9 || s=$1
[[ $s -gt 5 ]] || s=5
for (( w=1, r=7, n=1; n<=$s; n++ )) ; do
  for (( i=$s-n; i>0; i-- )) ;  do
    echo -n " "
  done
  for (( i=1; i<=w; i++ )) ; do
    echo -n "${a[r]}"
    [[ $r -gt 5 ]] && r=0 || r=$r+1
  done
  w=$w+2
  echo " "
done;
echo " "

এটা খুব সুন্দর।
পান্ডুবিয়ার

42

দাবি অস্বীকার: এটি আমার ল্যাটেক্স ক্রিসমাস ট্রি উপর ভিত্তি করে তৈরি করা হয়েছে, এখানে প্রথমে পোস্ট করা হয়েছে: https://tex.stackexchange.com/a/87921/8463

নিম্নলিখিত কোডটি এলোমেলোভাবে সজ্জা সহ একটি ক্রিসমাস গাছ উত্পন্ন করবে। আপনি গাছের আকার এবং এলোমেলো বীজ একটি আলাদা গাছ উত্পন্ন করতে উভয়ই পরিবর্তন করতে পারেন।

বীজ পরিবর্তন করতে মানটিকে \pgfmathsetseed{\year * 6}অন্য কোনও সংখ্যাসূচক মানতে পরিবর্তন করুন (ডিফল্টরূপে প্রতি বছর একটি নতুন গাছ উত্পন্ন হবে)

গাছের আকার পরিবর্তন করতে order=10আপনি যে গাছটি চান তার আকারের উপর নির্ভর করে আকারটিকে বৃহত্তর বা ছোট হতে পরিবর্তিত করুন।

উদাহরণ। order=11:

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

order=8

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

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc, lindenmayersystems,shapes,decorations,decorations.shapes}
\begin{document}

\def\pointlistleft{}
\def\pointlistright{}
\pgfmathsetseed{\year * 6}

\makeatletter
\pgfdeclarelindenmayersystem{Christmas tree}{
    \symbol{C}{\pgfgettransform{\t} \expandafter\g@addto@macro\expandafter\pointlistleft\expandafter{\expandafter{\t}}}
    \symbol{c}{\pgfgettransform{\t} \expandafter\g@addto@macro\expandafter\pointlistright\expandafter{\expandafter{\t}}}
    \rule{S -> [+++G][---g]TS}
    \rule{G -> +H[-G]CL}
    \rule{H -> -G[+H]CL}
    \rule{g -> +h[-g]cL}
    \rule{h -> -g[+h]cL}
    \rule{T -> TL}
    \rule{L -> [-FFF][+FFF]F}
}
\makeatother

\begin{tikzpicture}[rotate=90]
\draw [color=green!50!black,l-system={Christmas tree,step=4pt,angle=16,axiom=LLLLLLSLFFF,order=10,randomize angle percent=20}] lindenmayer system -- cycle;

\pgfmathdeclarerandomlist{pointsleft}{\pointlistleft}
\pgfmathdeclarerandomlist{pointsright}{\pointlistright}
\pgfmathdeclarerandomlist{colors}{{red}{blue}{yellow}}

\foreach \i in {0,1,...,5}
{
    \pgfmathrandomitem{\c}{pointsleft}
    \pgfsettransform{\c}
    \pgfgettransformentries{\a}{\b}{\c}{\d}{\xx}{\yy}
    \pgfmathrandomitem{\c}{pointsright}
    \pgfsettransform{\c}
    \pgfgettransformentries{\a}{\b}{\c}{\d}{\XX}{\YY}
    \pgftransformreset

    \pgfmathsetmacro\calcy{min(\yy,\YY)-max((abs(\yy-\YY))/3,25pt)}

    \draw[draw=orange!50!black, fill=orange!50, decorate, decoration={shape backgrounds, shape=star, shape sep=3pt, shape size=4pt}, star points=5] (\xx,\yy) .. controls (\xx,\calcy pt) and (\XX,\calcy pt) .. (\XX,\YY);
}

\foreach \i in {0,1,...,15}
{
    \pgfmathrandomitem{\c}{pointsleft}
    \pgfsettransform{\c}
    \pgftransformresetnontranslations
    \draw[color=black] (0,0) -- (0,-4pt);
    \pgfmathrandomitem{\c}{colors}
    \shadedraw[ball color=\c] (0,-8pt) circle [radius=4pt];
}

\foreach \i in {0,1,...,15}
{
    \pgfmathrandomitem{\c}{pointsright}
    \pgfsettransform{\c}
    \pgftransformresetnontranslations
    \draw[color=black] (0,0) -- (0,-4pt);
    \pgfmathrandomitem{\c}{colors}
    \shadedraw[ball color=\c] (0,-8pt) circle [radius=4pt];
}

\end{tikzpicture}
\end{document}

আমি বলব যে এটি স্টিফান কোটউইটসের গাছের উপর ভিত্তি করে তৈরি করা হয়েছে , এখানে প্রথম পোস্ট করা হয়েছে । এটি আপনার গাছের উপর ভিত্তি করে বলা এটিকে দেখে মনে হচ্ছে আপনি এর জন্য সমস্ত কোড লিখেছেন যা সত্য নয়। অন্য কেউ প্রকৃত গাছের জন্য সর্বাধিক কোড লিখেছেন।
দ্য

@ রায়ানকার্লসন লিন্ডেনমায়ার সিস্টেমটিকে সজ্জা করার জন্য ভিত্তি হিসাবে ব্যবহার করার ধারণাটি আমার ধারণা ছিল এবং আপনি যদি কোড দুটিই মনোযোগ সহকারে পরীক্ষা করেন তবে দেখতে পাবেন যে কোডটির লিন্ডমায়ার অংশটিও অতিরিক্ত অংশ (যেমন একটি অংশের মতো) নতুনভাবে তৈরি করা হয়েছিল গাছের জন্য মূল, যার মূল অভাব রয়েছে)। এর পাশাপাশি আমি মূলটি উল্লেখ করতে ভুলে যাইনি, যেখানে যে কেউ রেফারেন্সগুলি পরীক্ষা করতে পারে (পেইটজেন এবং স্যুপের সাথে একজন, যিনি সম্ভবত গাছের সমীকরণের খসড়াটি প্রথম তৈরি করেছিলেন)
SztupY

34

বেফুঞ্জ 93

এটি একটি অদৃশ্য গাছ:

&::00p20pv
vp010    <
v              p00<
>:0`!#v_" ",1-
v,"/"$<
>10g:2+v
vp01   <
>:0`!#v_" ",1-
v,"\"$<
>91+,00g1-::0`!#v_^
v        *2+1g02<
>:0`!#v_"-",1-
v g02$<
>91+,v
v    <
>:0`!#v_" ",1-
"||"$ <@,,

নমুনা আউটপুট, ইনপুট 10:

          /\
         /  \
        /    \
       /      \
      /        \
     /          \
    /            \
   /              \
  /                \
 /                  \
----------------------
          ||

আসুন কিছু সজ্জা যুক্ত করুন:

&::00p20pv
vp010    <
v              p00<
>:0`!#v_" ",1-
v,"/"$<
>10g:2+v             >"O" v
vp01   <            >?v
>:0`!#v_           >?>>" ">,1-
v,"\"$<             >?<
>91+,00g1-::0`!#v_^  >"*" ^
v        *2+1g02<
>:0`!#v_"-",1-
v g02$<
>91+,v
v    <
>:0`!#v_" ",1-
"||"$ <@,,

নমুনা আউটপুট:

          /\
         /O \
        /    \
       /   ** \
      /     *  \
     /    **   O\
    /* O* *  *   \
   / O      O     \
  / *  **   O*     \
 /   *OO   *  OOO * \
----------------------
          ||

32

এইচটিএমএল এবং সিএসএস

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Scalable christmas tree</title>
<style>
body {
  background-color: skyblue;
  background-size: 11px 11px, 21px 21px, 31px 31px;
  background-image: radial-gradient(circle at 5px 5px,white,rgba(255,255,255,0) 1px), radial-gradient(circle at 5px 5px,white,rgba(255,255,255,0) 2px), radial-gradient(circle at 5px 5px,white 1px,skyblue 1px);
}
div {
  float: left;
  border-style: solid;
  border-color: transparent;
  border-bottom-color: green;
  border-width: 20px;
  border-top-width: 0;
  border-bottom-width: 30px;
  border-bottom-left-radius: 35%;
  border-bottom-right-radius: 35%;
  box-shadow: red 0 15px 5px -13px;
  animation-name: light;
  animation-duration: 1s;
  animation-direction: alternate;
  animation-iteration-count: infinite;
  -webkit-animation-name: light;
  -webkit-animation-duration: 1s;
  -webkit-animation-direction: alternate;
  -webkit-animation-iteration-count: infinite;
}
section {
  float: left;
}
header {
  color: yellow;
  font-size: 30px;
  text-align: center;
  text-shadow: red 0 0 10px;
  line-height: .5;
  margin-top: 10px;
  animation-name: star;
  animation-duration: 1.5s;
  animation-direction: alternate;
  animation-iteration-count: infinite;
  -webkit-animation-name: star;
  -webkit-animation-duration: 1.5s;
  -webkit-animation-direction: alternate;
  -webkit-animation-iteration-count: infinite;
}
footer {
  float: left;
  width: 100%;
  height: 20px;
  background-image: linear-gradient(to right, transparent 45%, brown 45%, #600 48%, #600 52%, brown 55%, transparent 55%);
}
:target {
  display: none;
}
@keyframes star {
  from { text-shadow: red 0 0 3px; }
  to { text-shadow: red 0 0 30px; }
}
@-webkit-keyframes star {
  from { text-shadow: red 0 0 3px; }
  to { text-shadow: red 0 0 30px; }
}
@keyframes light {
  from { box-shadow: red 0 15px 5px -13px; }
  to { box-shadow: blue 0 15px 5px -13px; }
}
@-webkit-keyframes light {
  from { box-shadow: red 0 15px 5px -13px; }
  to { box-shadow: blue 0 15px 5px -13px; }
}
</style>
</head>
<body>
<section>
<header>&#x2605;</header>
<div id="0"><div id="1"><div id="2"><div id="3"><div id="4"><div id="5"><div id="6"><div id="7"><div id="8"><div id="9"><div id="10"><div id="11"><div id="12"><div id="13"><div id="14"><div id="15"><div id="16"><div id="17"><div id="18"><div id="19"><div id="20"><div id="21"><div id="22"><div id="23"><div id="24">
</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
<footer></footer>
</section>
</body>
</html>

1 থেকে 25 এর মধ্যে আকারগুলি সমর্থিত - কেবলমাত্র ইউআরএলকে খণ্ড সনাক্তকারী হিসাবে আকার যুক্ত করুন।

ক্রোম, এক্সপ্লোরার এবং ফায়ারফক্সে কাজ করে। অপেরাতে কুরুচিপূর্ণ তবে স্কেলিং অংশটি কাজ করে।

নমুনা অ্যাক্সেস:

http://localhost/xmas.html#5

5 আকারের ক্রিসমাস ট্রি

নমুনা অ্যাক্সেস:

http://localhost/xmas.html#15

আকারের ক্রিসমাস ট্রি 15

লাইভ দেখুন:

http://dabblet.com/gist/8026898

(লাইভ ভিউতে কোনও বিক্রেতার পূর্বনির্ধারিত সিএসএস নেই এবং আকার পরিবর্তন করার জন্য লিঙ্কগুলি অন্তর্ভুক্ত রয়েছে))


1
+1 আমি :targetআউটপুটটি স্কেল করতে ব্যবহার করার ধারণাটি পছন্দ করি :-)
চটজলদি ossifrage

32

জাভা

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 *
 * @author Quincunx
 */
public class ChristmasTree {
    public static double scale = 1.2;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ChristmasTree();
            }
        });
    }

    public ChristmasTree() {
        try {
            URL url = new URL("http://imgs.xkcd.com/comics/tree.png");
            BufferedImage img = ImageIO.read(url);

            JFrame frame = new JFrame();
            frame.setUndecorated(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

            BufferedImage result = 
                    new BufferedImage((int)(img.getWidth() * scale), 
                            (int) (img.getHeight() * scale), 
                            BufferedImage.TYPE_INT_RGB);
            Graphics2D g = (Graphics2D) result.getGraphics();
            g.drawRenderedImage(img, AffineTransform.getScaleInstance(scale, scale));

            JImage image = new JImage(result);
            image.setToolTipText("Not only is that terrible in general, but you "
                    + "just KNOW Billy's going to open the root present first, "
                    + "and then everyone will have to wait while the heap is "
                    + "rebuilt.");
            frame.add(image);
            frame.pack();
            frame.setVisible(true);

        } catch (IOException ex) {

        }
    }

    class JImage extends JPanel implements MouseListener {

        BufferedImage img;

        public JImage(){
            this(null);
        }
        public JImage(BufferedImage image){
            img = image;
            setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
            addMouseListener(this);
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(img, WIDTH, WIDTH, this);
        }

        public void setImage(BufferedImage image) {
            img = image;
            repaint();
        }

        @Override
        public void mouseClicked(MouseEvent me) {
            System.exit(0);
        }

        @Override
        public void mousePressed(MouseEvent me) {

        }

        @Override
        public void mouseReleased(MouseEvent me) {

        }

        @Override
        public void mouseEntered(MouseEvent me) {

        }

        @Override
        public void mouseExited(MouseEvent me) {

        }
    }
}

আকার পরিবর্তন scaleকরতে , অন্য কয়েকটি দ্বিগুণ মানতে পরিবর্তন করুন (যদি আপনি কিছু দেখতে চান তবে এটি 1 এর কাছাকাছি রাখুন)।

নমুনা আউটপুট (স্কেলের হিসাবে 1.0 এর জন্য স্ক্রিনশট নিতে খুব অলস, সুতরাং এটি কেবল পোস্ট করে):

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

প্রোগ্রামটি এই চিত্রটিকে ইন্টারনেট থেকে নিয়ে যায়, অনুযায়ী এটির আকার পরিবর্তন করে scale, তারপরে এটি প্রদর্শিত হয় এমন একটি অদৃশ্য উইন্ডোতে রাখে। উইন্ডোতে ক্লিক করা প্রোগ্রামটি বন্ধ করে দেয়। এছাড়াও, সরঞ্জাম টিপ পাঠ্য রয়েছে, তবে লিঙ্কটি নেই।


3
এটি কোনও "অঙ্কন" নয়।
মিঃচিফ

@ মিছিফ চ্যালেঞ্জটি কিছু আঁকতে নয়; এটি একটি গাছ তৈরি করা হয়। চিত্রটি ধরে এটি একটি গাছ তৈরি করছে
জাস্টিন

2
আপনি নিজেই ছবিটি তৈরি করেছেন? না, আপনি এটি কোথাও থেকে ডাউনলোড করছেন। প্রশ্নটি কোনও চিত্র ডাউনলোড করে তা পুনরায় আকার দেওয়ার নয়। অন্যান্য উত্তরগুলি পরীক্ষা করুন এবং আপনি বুঝতে পারবেন যে ওপি আসলে কী চেয়েছিল।
মিচিফ

10
@ মিঃরিচ আপনি কি খেয়াল করেছেন যে ওপি কে লিখেছেন? আমি যখন এই প্রশ্নটি জিজ্ঞাসা করেছি তখন এটি অনেকগুলি সম্ভাব্য সমাধানগুলির মধ্যে আমি খুঁজছিলাম।
জাস্টিন

3
হা! মাথায় আঘাত! এটি আপনার নিজের পোস্ট হিসাবে, তর্ক করার খুব বেশি কারণ আমি দেখতে পাচ্ছি না, আমার মতামত প্রকাশ করা ছাড়াও যে এটি আপনার কোড "তৈরি" করার মতো নয় (অন্যান্য উত্তরগুলির মতো)। মুভি ডাউনলোড করা যেমন মুভি বানানোর মতো হয় না তেমন।
মিচিফ

28

টিআই-89 বেসিক

কেবলমাত্র আমি আমার ক্যালকুলেটরটিতে একটি ক্রিসমাস ট্রি দেখতে চেয়েছিলাম। এটি আমার ক্যালকুলেটর হিসাবে প্রদর্শিত হিসাবে এটি এখানে টাইপ করব।

:tree()
:Prgm
:
:Local size
:Prompt size
:
:Local d,x,y,str,orn
:size→x
:0→y
:{" "," "," "," "," "," "," "," ","°","∫","θ","O","©"}→orn
:size→d
:
:While d≥0
: d-1→d
: ""→str
: 
: While x≥0
:  str&" "→str
:  x-1→x
: EndWhile
: 
: str&"/"→str
: 2*y→x
:
: While x>0
:  str&elementAt(orn,rand(colDim(list▶mat(orn))))→str
:  x-1→x
: EndWhile
: 
: str&"\"→str
: Disp str
: y+1→y
: d→x
:EndWhile
:
:""→str
:
:For x,1,2*(size+2)
: str&"-"→str
:EndFor
:Disp str
:
:""→str
:For x,1,size+1
: str&" "→str
:EndFor
:str&"||"→str
:Disp str
:
:EndPrgm


:elementAt(l,i)
:Func
:Local m
:list▶mat(l)→m
:
:Local cd
:colDim(m)→cd
:
:If i>cd or i≤0 Then
: 1/0
:Else
: If i=cd Then
:  Return sum(mat▶list(subMat(m,1,i))) - sum(mat▶list(subMat(m,1,i+1)))
: Else
:  Return sum(mat▶list(subMat(m,1,i))) - sum(mat▶list(subMat(m,1,i+1)))
: EndIf
:EndIf
:EndFunc

এটি আমার বেফঞ্জ উত্তর হিসাবে একইভাবে কাজ করে, তবে আমি বিভিন্ন অলঙ্কার ব্যবহার করি। হ্যাঁ, আমার elementAtফাংশনের পুনরাবৃত্ত ব্যবহারগুলি তালিকা এবং ম্যাট্রিকের মধ্যে অনেকগুলি রূপান্তরের কারণে প্রোগ্রামটিকে ধীর করে দেয়, তবে আমি আগে যেমন লিখেছি, আমি এটিকে সম্পাদনা করার বিরুদ্ধে সিদ্ধান্ত নিয়েছি। এছাড়াও, আমি এই উত্তরটি টাইপ করার সময় শিখেছি যা ©একটি মন্তব্য করে (আমি ভেবেছিলাম এটি দেখতে দেখতে ভাল লাগে @তবে এটি অন্য একটি চরিত্র)। এখন আগে কখনও তা জানেনি knew

নমুনা আউটপুট:

size?
7
        /\
       / O\
      /∫   \
     / ©  ∫°\
    / θ ∫   ∫\
   /°  °  ©  ©\
  /O  ∫  O °   \
 / θ  °©  ∫ O  θ\
------------------
        ||

আমি তাদের ভালবাসি ; তারা দেখতে মিছরি বেতের মতো।


এটি কোন সংস্করণ?
সুপারজেডি ২২৪

@ সুপারজেডি ২২৪ উত্তরে আমি এটি যুক্ত করেছি
জাস্টিন

27

ওল্ফ্রাম ভাষা ( গণিত )

খ্যাতিমান রেডডিট থ্রেডে যেমন আলোচনা করা হয়েছে: টি * পাপ (টি) ≈ ক্রিসমাস ট্রি

PD = .5; s[t_, f_] := t^.6 - f;
 dt[cl_, ps_, sg_, hf_, dp_, f_] := 
    {PointSize[ps], Hue[cl, 1, .6 + sg .4 Sin[hf s[t, f]]], 
     Point[{-sg s[t, f] Sin[s[t, f]], -sg s[t, f] Cos[s[t, f]], dp + s[t, f]}]};

 frames = ParallelTable[

    Graphics3D[Table[{dt[1, .01, -1, 1, 0, f], dt[.45, .01, 1, 1, 0, f], 
                      dt[1, .005, -1, 4, .2, f], dt[.45, .005, 1, 4, .2, f]}, 
 {t, 0, 200, PD}],

     ViewPoint -> Left, BoxRatios -> {1, 1, 1.3}, ViewVertical -> {0, 0, -1}, 
    ViewCenter -> {{0.5, 0.5, 0.5}, {0.5, 0.55}}, Boxed -> False, Lighting -> "Neutral", 
    PlotRange -> {{-20, 20}, {-20, 20}, {0, 20}}, Background -> Black],

   {f, 0, 1, .01}];

Export["tree.gif", frames]

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


আপনি কোথায় আকার নির্ধারণ করেছেন এবং এটি উত্পন্ন গাছকে কীভাবে প্রভাবিত করে?
manatwork

2
@ মান্যাটওয়ার্ক t*sin(t)এটি পোস্টে আমি যেমন বলেছিলাম তেমন গ্রাফ । সুতরাং বৃহত্তর Table[..., {t, 0, 200, PD}]
টিয়ের

24

বিসি এবং ইমেজম্যাগিকের সাথে ব্যাশ করুন

#!/bin/bash

size="${1:-10}"

width=$(( size*25 ))
height=$(( size*size+size*10 ))

cos=( $( bc -l <<< "for (i=0;i<3.14*2;i+=.05) c(i)*100" ) )
sin=( $( bc -l <<< "for (i=0;i<3.14*2;i+=.05) s(i)*100" ) )
cos=( "${cos[@]%.*}" )
sin=( "${sin[@]%.*}" )

cos=( "${cos[@]/%-/0}" )
sin=( "${sin[@]/%-/0}" )

snow=()
needle=()
decor=()
for ((i=2;i<size+2;i++)); do
  for ((j=3;j<=31;j++)); do
    (( x=width/2+i*10+cos[62-j]*i*10/100 ))
    (( y=i*i+sin[j]*i*5/100 ))

    for ((e=0;e<i;e++)); do
      needle+=(
        -draw "line $x,$y $(( x+RANDOM%i-i/2 )),$(( y+RANDOM%i-i/2 ))"
        -draw "line $(( width-x )),$y $(( width-x+RANDOM%i-i/2 )),$(( y+RANDOM%i-i/2 ))"
      )
    done

    (( RANDOM%2 )) && (( x=width-x ))
    snow+=(
      -draw "circle $x,$(( y-i/2 )) $(( x+i/3 )),$(( y-i/2+i/3 ))"
    )

    (( RANDOM%10 )) || decor+=(
      -fill "rgb($(( RANDOM%5*20+50 )),$(( RANDOM%5*20+50 )),$(( RANDOM%5*20+50 )))"
      -draw "circle $x,$(( y+i )) $(( x+i/2 )),$(( y+i+i/2 ))"
    )
  done
done

flake=()
for ((i=0;i<width*height/100;i++)); do
  flake+=(
    -draw "point $(( RANDOM%width )),$(( RANDOM%height ))"
  )
done

convert \
  -size "${width}x$height" \
  xc:skyblue \
  -stroke white \
  -fill white \
  "${snow[@]}" \
  -blur 5x5 \
  "${flake[@]}" \
  -stroke brown \
  -fill brown \
  -draw "polygon $(( width/2 )),0 $(( width/2-size )),$height, $(( width/2+size )),$height" \
  -stroke green \
  -fill none \
  "${needle[@]}" \
  -stroke none \
  -fill red \
  "${decor[@]}" \
  x:

নমুনা রান:

bash-4.1$ ./xmas.sh 5

নমুনা আউটপুট:

5 আকারের ক্রিসমাস ট্রি

নমুনা রান:

bash-4.1$ ./xmas.sh 15

নমুনা আউটপুট:

আকারের ক্রিসমাস ট্রি 15


23

সি

গভীরতার জন্য নমুনা আউটপুট = 4, জুম = 2.0

গাছ

এই উত্তরটি অন্য উত্তরগুলির থেকে একেবারেই আলাদা একটি পদ্ধতির নিয়োগ করে। এটি পুনরাবৃত্তভাবে শাখা করে গাছের কাঠামো তৈরি করে। প্রতিটি শাখা চেনাশোনাগুলির একটি সেট দ্বারা প্রতিনিধিত্ব করা হয়। এবং অবশেষে মূল ফাংশন চেনাশোনাগুলিকে নমুনা দেয় এবং চেনাশোনাগুলি পূরণ করা হলে অক্ষরগুলি পূরণ করে। যেহেতু এটি কোনও দৃশ্যের (রে-ট্রেসিংয়ের মতো) নমুনা তৈরির মাধ্যমে করা হয়েছে, তাই এটি অভ্যন্তরীণভাবে স্কেলেবল। নেতিবাচক দিকটি গতি, যেহেতু এটি প্রতিটি "পিক্সেল" এর জন্য পুরো গাছের কাঠামোকে অতিক্রম করে!

প্রথম কমান্ড-লাইন আর্গুমেন্ট শাখার গভীরতা নিয়ন্ত্রণ করে। এবং দ্বিতীয় নিয়ন্ত্রণ স্কেল (2 এর অর্থ 200%)।

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

#define PI 3.14159265359

float sx, sy;

float sdCircle(float px, float py, float r) {
    float dx = px - sx, dy = py - sy;
    return sqrtf(dx * dx + dy * dy) - r;
}

float opUnion(float d1, float d2) {
    return d1 < d2 ? d1 : d2;
}

#define T px + scale * r * cosf(theta), py + scale * r * sin(theta)

float f(float px, float py, float theta, float scale, int n) {
    float d = 0.0f;
    for (float r = 0.0f; r < 0.8f; r += 0.02f)
        d = opUnion(d, sdCircle(T, 0.05f * scale * (0.95f - r)));

    if (n > 0)
        for (int t = -1; t <= 1; t += 2) {
            float tt = theta + t * 1.8f;
            float ss = scale * 0.9f;
            for (float r = 0.2f; r < 0.8f; r += 0.1f) {
                d = opUnion(d, f(T, tt, ss * 0.5f, n - 1));
                ss *= 0.8f;
            }
        }

    return d;
}

int ribbon() {
    float x = (fmodf(sy, 0.1f) / 0.1f - 0.5f) * 0.5f;
    return sx >= x - 0.05f && sx <= x + 0.05f;
}

int main(int argc, char* argv[]) {
    int n = argc > 1 ? atoi(argv[1]) : 3;
    float zoom = argc > 2 ? atof(argv[2]) : 1.0f;
    for (sy = 0.8f; sy > 0.0f; sy -= 0.02f / zoom, putchar('\n'))
        for (sx = -0.35f; sx < 0.35f; sx += 0.01f / zoom) {
            if (f(0, 0, PI * 0.5f, 1.0f, n) < 0.0f) {
                if (sy < 0.1f)
                    putchar('.');
                else {
                    if (ribbon())
                        putchar('=');
                    else
                        putchar("............................#j&o"[rand() % 32]);
                }
            }
            else
                putchar(' ');
        }
}

2
আমি মনে করি এটি বলা নিরাপদ এটি এখন পর্যন্ত এই প্রশ্নের সবচেয়ে প্রযুক্তিগতভাবে চিত্তাকর্ষক উত্তর।
স্টান্টডুড

20

গণিত এএসসিআই

আমি সত্যই ASCII শিল্প পছন্দ করি, তাই আমি আরও একটি ভিন্ন উত্তর যুক্ত করি - বিশেষত এটি ম্যাথমেটিকায় এত ছোট:

Column[Table[Row[RandomChoice[{"+", ".", "*", "~", "^", "o"}, k]], {k, 1, 35, 2}], 
Alignment -> Center]

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

এবং এখন আরও কিছু পরিশীলনের সাথে একটি স্কেলযোগ্য গতিশীল এএসসিআইআই গাছ। ঘনিষ্ঠভাবে দেখুন - গাছটিও বদলে যাচ্ছে - তুষারগুলি শাখাগুলিতে লেগে যায় তখন পড়ে ;-)

DynamicModule[{atoms, tree, pos, snow, p = .8, sz = 15},

 atoms = {
   Style["+", White],
   Style["*", White],
   Style["o", White],
   Style[".", Green],
   Style["~", Green],
   Style["^", Green],
   Style["^", Green]
   };

 pos = Flatten[Table[{m, n}, {m, 18}, {n, 2 m - 1}], 1];

 tree = Table[RandomChoice[atoms, k], {k, 1, 35, 2}];

 snow = Table[
   RotateLeft[ArrayPad[{RandomChoice[atoms[[1 ;; 2]]]}, {0, sz}, " "],
     RandomInteger[sz]], {sz + 1}];

 Dynamic[Refresh[

   Overlay[{

     tree[[Sequence @@ RandomChoice[pos]]] = RandomChoice[atoms];
     Column[Row /@ tree, Alignment -> Center, Background -> Black],

     Grid[
      snow = 
       RotateRight[
        RotateLeft[#, 
           RandomChoice[{(1 - p)/2, p, (1 - p)/2} -> {-1, 0, 1}]] & /@
          snow
        , {1, 0}]]

     }, Alignment -> Center]

   , UpdateInterval -> 0, TrackedSymbols -> {}]
  ]
 ]

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


সুন্দর. আপনি কোথায় আকার সামঞ্জস্য? এটি কি 35 Tableএর পরামিতিগুলিতে?
manatwork

টেবিলের 35 টি মানচিত্র হ্যাঁ 35 টি। ধন্যবাদ;)
ভিটালিয়া কৌরভ

19

আমি এটি / আর / ডেইলিপ্রোগ্রামে একটি চ্যালেঞ্জের জন্য করেছি , (কোডটি পুনরায় ব্যবহার করা যদি এর চেতনা / বিধিগুলির বিরুদ্ধে হয় তবে তা নিশ্চিত নয়) তবে:

Brainfuck। ইনপুট হিসাবে একটি সংখ্যা (পাতার নীচের সারির দৈর্ঘ্য) এবং দুটি অক্ষর হিসাবে নেয়। প্রত্যেকের মধ্যে একটি স্থান।

উদাহরণ ইনপুট: 13 = +

উদাহরণ আউটপুট:

      +
     +++
    +++++
   +++++++
  +++++++++
 +++++++++++
+++++++++++++
     ===

কোড:

                   >
                  ,--
                 -----
                -------
               ---------
              ---------[+
             +++++++++++++
            +++++++++++++++
           +++<[>>++++++++++
          <<-]>--------------
         ---------------------
        -------------[<+>-]>[<<
       +>>-]<,------------------
      --------------],>,,>>++++[<
     ++++++++>-]++++++++++>+<<<<<-
    [>>>>>>+>+<<<<<<<--]>>>>>>>[<<<
   <<<<++>>>>>>>-]<<<<<<<[>>>>>>[<<<
  .>>>>+<-]>[<+>-]<<[<<<.>>>>>+<<-]>>
 [<<+>>-]<<<.>>><-<++<<<<<--]>>...>>>-
--[>+<<<<..>>>--]<.>>[<<<.>>>>+<-]<<<<<
                ...>>>.

1
অবশেষে, একটি ব্রেইনফাক উত্তর!
ফারাপ

16

প্রসেসিং

মূল ফ্র্যাক্টাল ক্রিসমাস ট্রি। মাউস ওয়াই অবস্থান প্রজন্মের সংখ্যা পরিবর্তন করতে আকার নির্ধারণ করে, আপ এবং ডাউন তীর কীগুলি ব্যবহার করে es

int size = 500;

int depth = 10;

void setup() {
  frameRate(30);
  size(size, size, P2D);
}

void draw() {
  background(255);
  tree(size/2.0, size, 0.0, radians(0), radians(108), (size - mouseY)/3, depth);
  tree(size/2.0, size, 0.0, radians(108), radians(0), (size - mouseY)/3, depth);
}

void keyPressed() {
  if(keyCode == UP) depth++;
  if(keyCode == DOWN) depth--;
  depth = max(depth, 1);
}

void tree(float posX, float posY, float angle, float forkRight, float forkLeft, float length, int generation) {
  if (generation > 0) {
    float nextX = posX + length * sin(angle);
    float nextY = posY - length * cos(angle);

    line(posX, posY, nextX, nextY);

    tree(nextX, nextY, angle + forkRight, forkRight, forkLeft, length*0.6, generation - 1);
    tree(nextX, nextY, angle - forkLeft,  forkRight, forkLeft, length*0.6, generation - 1);
  }
}

কি সুন্দর ক্রিসমাস ট্রি, আপনি মনে করেন না, মা?

Or, if you prefer a fuller tree:

int size = 500;

int depth = 10;

void setup() {
  frameRate(30);
  size(size, size, P2D);
}

void draw() {
  background(255);
  tree(size/2.0 - 5, size, 0.0, 0.0, (size - mouseY)/3, depth);
}

void keyPressed() {
  if(keyCode == UP) depth++;
  if(keyCode == DOWN) depth--;
  depth = max(depth, 1);
}

void tree(float posX, float posY, float angle, float fork, float length, int generation) {
  if (generation > 0) {
    float nextX = posX + length * sin(angle);
    float nextY = posY - length * cos(angle);

    line(posX, posY, nextX, nextY);

    tree(nextX, nextY, angle + fork + radians(108), fork, length*0.6, generation - 1);
    tree(nextX, nextY, angle - fork,                fork, length*0.6, generation - 1);
    tree(nextX, nextY, angle + fork - radians(108), fork, length*0.6, generation - 1);
  }
}

আমি খুব অবাক হয়েছি যে ধারণাতে এবং বাস্তবে এটির কাজ শুরু করার আগে আমি তাদের চেয়ে এগিয়ে থাকলেও কেউ আমাকে একটি ফ্র্যাক্টাল গাছ পোস্ট করার জন্য মারধর করেছে: /


14

চুনি

((1..20).to_a+[6]*4).map{|i|puts ('*'*i*2).center(80)}

শুভ নব বর্ষ

আপনি পরিবর্তন করে আউটপুট কাস্টমাইজ করতে পারেন *
সবুজ গাছের জন্য:((1..20).to_a+[6]*4).map{|i|puts "\e[32m"+('*'*i*2).center(80)}

অ্যাপ্রোচ 2 (ক্রিসমাস ট্রি যা তীরের মতো দেখাচ্ছে না)

((1..6).to_a+(3..9).to_a+(6..12).to_a+[3]*4).map{|i|puts "\e[32m"+('*'*i*4).center(80)}

শুভ নব বর্ষ

পদ্ধতির ঘ

((1..20).to_a+[6]*4).map{|i|puts' '*(20-i)+'*'*(2*i-1)}

2
এটি আরও তীর, তারপর ক্রিসমাস গাছ!
ক্লিংটনেট

4
@ ক্লিংটটনেট * এর চেয়ে বেশি।
নারকোজ

ক্রিসমাস ট্রি জ্বলানোর সময়।
নারকোজ

এবং আপনি যেখানে আকার নির্দিষ্ট?
manatwork

রেঞ্জগুলিতে @ মান্যাটওয়ার্ক 1..20, 1..6ইত্যাদি
NarkOZ

14

কচ্ছপ গ্রাফিক্স

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

এলিউর সর্পিল বৈশিষ্ট্যের উপর ভিত্তি করে ।

কোড:

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

স্কেলটি ধাপের আকার ( move forward by: 6) দ্বারা নির্ধারিত হয় । একটি ইন্টারেক্টিভ সংস্করণ এখানে উপলব্ধ ।

পিএস এই প্রশ্নের দ্বারা অনুপ্রাণিত ।


কোথায় এই "স্কেলেবল"? তা ছাড়া, এই দুর্দান্ত!
জাস্টিন

@ কুইনকুনেক্স আপনি পরিবর্তন করে স্কেল পরিবর্তন করতে পারবেন move forward by 6। উদাহরণস্বরূপ, 10একটি বৃহত গাছ উত্পাদন করবে। আসলে এই "ভাষা" তে কোনও ইনপুট নেই (বা পুরো কোডটি ইনপুট হিসাবে বিবেচনা করা যেতে পারে;))।
ইবেলটুকভ

14

প্রসেসিং

আমি একটি এল-সিস্টেম এবং একটি কচ্ছপ ব্যবহার করে এই ট্রি জেনারেটর তৈরি করেছি।

একটি গাছ

কোড:

//My code, made from scratch:
final int THE_ITERATIONS = 7;
final float SCALE = 1;
final int ANGLE = 130;
final int SIZE = 4;

final int ITERATIONS = THE_ITERATIONS - 1;

int lineLength;

String lSystem;
ArrayList<Turtle> turtles;

int turtleIndex;
int lSystemIndex;

void setup()
{
  size(320, 420);
  background(255);
  translate(width / 2, height - 70);

  lineLength = ITERATIONS * 2 + 2;

  lSystem = "[-F][+F]F";

  turtles = new ArrayList<Turtle>(ITERATIONS + 1);
  lSystemIndex = 0;

  calculateLSystem();
  println(lSystem);

  turtles.add(new Turtle(0, 0));

  doTurtles();
  save("Tree.png");
}

void doTurtles()
{
  while(lSystemIndex < lSystem.length())
  {
    print("\"" + lSystem.charAt(lSystemIndex) + "\": ");
    if(lSystem.charAt(lSystemIndex) == 'F')
    {
      turtleForward();
    }
    else if(lSystem.charAt(lSystemIndex) == '[')
    {
      lineLength -= 2;
      addTurtle();
      println(turtles.size());
    }
    else if(lSystem.charAt(lSystemIndex) == ']')
    {
      lineLength += 2;
      removeTurtle();
      println(turtles.size());
    }
    else if(lSystem.charAt(lSystemIndex) == '+')
    {
      turtleRight();
    }
    else if(lSystem.charAt(lSystemIndex) == '-')
    {
      turtleLeft();
    }
    lSystemIndex++;
  }
}

void addTurtle()
{
  turtles.add(new Turtle(turtles.get(turtles.size() - 1)));
}

void removeTurtle()
{
  turtles.remove(turtles.size() - 1);
}

void turtleLeft()
{
  turtles.get(turtles.size() - 1).left(ANGLE + random(-5, 5));
}

void turtleRight()
{
  turtles.get(turtles.size() - 1).right(ANGLE + random(-5, 5));
}

void turtleForward()
{
  print(turtles.get(turtles.size() - 1) + ": ");
  strokeWeight(min(lineLength / SIZE, 1));
  stroke(5 + random(16), 90 + random(16), 15 + random(16));
  if(turtles.size() == 1)
  {
    strokeWeight(lineLength / 2);
    stroke(100, 75, 25);
  }
  turtles.get(turtles.size() - 1).right(random(-3, 3));
  turtles.get(turtles.size() - 1).forward(lineLength);
}

void calculateLSystem()
{
  for(int i = 0; i < ITERATIONS; i++)
  {
    lSystem = lSystem.replaceAll("F", "F[-F][+F][F]");
  }
  lSystem = "FF" + lSystem;
}

void draw()
{

}

//——————————————————————————————————————————————————————
// Turtle code, heavily based on code by Jamie Matthews
// http://j4mie.org/blog/simple-turtle-for-processing/
//——————————————————————————————————————————————————————

class Turtle {
  float x, y; // Current position of the turtle
  float angle = -90; // Current heading of the turtle
  boolean penDown = true; // Is pen down?
  int lineLength;

  // Set up initial position
  Turtle (float xin, float yin) {
    x = xin;
    y = yin;
    //lineLength = lineLengthin;
  }

  Turtle (Turtle turtle) {
    x = turtle.x;
    y = turtle.y;
    angle = turtle.angle;
    //lineLength = turtle.lineLength - 1;
  }

  // Move forward by the specified distance
  void forward (float distance) {
    distance = distance * SIZE * random(0.9, 1.1);
    // Calculate the new position
    float xtarget = x+cos(radians(angle)) * distance;
    float ytarget = y+sin(radians(angle)) * distance;

    // If the pen is down, draw a line to the new position
    if (penDown) line(x, y, xtarget, ytarget);
    println(x + ", " + y + ", " + xtarget + ", " + ytarget);
    // Update position
    x = xtarget;
    y = ytarget;
  }

  // Turn left by given angle
  void left (float turnangle) {
    angle -= turnangle;
    println(angle);
  }

  // Turn right by given angle
  void right (float turnangle) {
    angle += turnangle;
    println(angle);
  }
}

2
হ্যাঁ! একটি এল সিস্টেম!
লুসার droog

1
আমি এটি সবচেয়ে বাস্তববাদী হওয়ার বিষয়ে সম্মত আছি :)
টিমটেক

@ টিমটেক আমি একমত নই আমি মনে করি এটি জান দ্বোড়াকের জাভাস্ক্রিপ্ট উত্তরের পরে দ্বিতীয় সবচেয়ে বাস্তব । মানে, need সূঁচগুলি দেখুন (এটির উপরে)! চিরসবুজ গাছে আমি দেখিনি নিদর্শনগুলিতে এগুলি সমস্ত একসাথে গুচ্ছযুক্ত। যাইহোক, জানের গাছটি দেখতে অনেকটা আমার কাছে চারা গাছের মতো লাগে।
জাস্টিন

1
@ কুইনকঙ্কস আমি অবশ্যই এটি মিস করেছি। তবুও, এটি দেখতে বেশ সুন্দর দেখাচ্ছে।
টিমটেক

@ কুইঙ্কাঙ্কস জানের গাছ এবং হাওয়ার্ডসও খুব সুন্দর, তবে এটি সম্পূর্ণ বাস্তববাদী নয় । জেন এমনকি স্বীকারও করেছেন যে গাছটি কেবল "quasirealistic"। - রায়ানকার্লসন 10 সেকেন্ড আগে
দ্য

12

জাভাস্ক্রিপ্ট (কনসোলের যে কোনও পৃষ্ঠায় চালানো)

আমি এটি গল্ফ করছিলাম তবে তারপরে সিদ্ধান্ত নিলাম না, যাতে আপনি দেখতে পাচ্ছেন যে এখানে অনেকগুলি ম্যাজিক সংখ্যা রয়েছে: পি P

// size
s = 300

document.write('<canvas id=c width=' + s + ' height=' + s + '>')
c = document.getElementById('c').getContext('2d')
c.fillStyle = '#0D0'
for (var i = s / 3; i <= s / 3 * 2; i += s / 6) {
  c.moveTo(s / 2, s / 10)
  c.lineTo(s / 3, i)
  c.lineTo(s / 3 * 2, i)
  c.fill()
}
c.fillStyle = '#DA0'
c.fillRect(s / 2 - s / 20, s / 3 * 2, s / 10, s / 6)

S = 300 এর জন্য ফলাফল:

স্ক্রিনশট

s = 600:

স্ক্রিনশট


2
আপনি কি গাছ সাজাতে যাচ্ছেন? :-)
জাস্টিন

1
@ কুইনকুনক্স সম্ভবত, আমি পরে এটিতে কাজ করতে পারি :)
ডুরকনব

2
গাহ! সেমিকোলন কোথায় ?!
অ্যান্ড্রু লারসন


10

গেম মেকার ল্যাঙ্গুয়েজ

spr_tree

spr_tree

গাছের ইভেন্ট তৈরি করুন

image_speed=0
size=get_integer("How big do you want me to be?#Integer between 1 and 10, please!",10)
image_index=size-1

ঘর, 402 599 দ্বারা

গাছটি রাখা হয় (0,0)

বোনাস! আপনি 0-9 কীগুলির সাহায্যে প্রাথমিক ইনপুট পরে ক্রিসমাস ট্রিকে আকার দিতে পারেন।


8

অ্যাপলস্ক্রিপ্ট + এসই উত্তর

এই প্রশ্নের উত্তর সম্পাদনা করার সময় দুর্ঘটনাক্রমে সত্যই এটি বাছাই করা। চিত্রে যান.

কোডটি চালিয়ে, আপনার নম্বরটি টাইপ করে, এসই পোস্টে স্যুইপ করে এবং পাঠ্য ক্ষেত্রে ক্লিক করে এটি ব্যবহার করুন। এটি স্ট্যাকের উদ্ধৃতি দিয়ে সত্যটি কাজে লাগায়।

tell application "System Events"
    set layers to (display dialog "" default answer "")'s text returned as number
    delay 5
    repeat layers times
        keystroke ">"
    end repeat
end tell

আউটপুট (ইনপুট 50):

>


6

সজ্জিত ফরট্রান গাছ

    character(len=36) :: f='/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\'
    character(len=18) :: g = '                  '
    character(len=14) :: p = ".x$.+oO+oO.#,~"
    character(len=10) :: q

    n = iargc()
    if (n /= 1) then 
        k = len(g)
    else
        call getarg(1,q) 
        read(q,*) k
    end if
    l = modulo(k,len(g))+1
    do i=1,l
        j = mod(i,len(p)-1)+1
        print *,g(1:l-i),p(j:j),f(1:2*i),p(j+1:J+1)
        end do
    print *,g(1:l-1),f(1:4)
    end

গাছটির আকার সীমিত রয়েছে, তবে এটি বিশ্বাস করে যে এটি বেশিরভাগ ক্রিসমাস গাছের জীবনকে সঠিকভাবে প্রতিফলিত করে।

শিশু গাছ থেকে:

$./tree
 x/\$
 /\/\

কিশোর গাছ:

$./tree 6
       x/\$
      $/\/\.
     ./\/\/\+
    +/\/\/\/\o
   o/\/\/\/\/\O
  O/\/\/\/\/\/\+
 +/\/\/\/\/\/\/\o
       /\/\

প্রাপ্তবয়স্কদের কাছে:

$./tree 17
                  x/\$
                 $/\/\.
                ./\/\/\+
               +/\/\/\/\o
              o/\/\/\/\/\O
             O/\/\/\/\/\/\+
            +/\/\/\/\/\/\/\o
           o/\/\/\/\/\/\/\/\O
          O/\/\/\/\/\/\/\/\/\.
         ./\/\/\/\/\/\/\/\/\/\#
        #/\/\/\/\/\/\/\/\/\/\/\,
       ,/\/\/\/\/\/\/\/\/\/\/\/\~
      ./\/\/\/\/\/\/\/\/\/\/\/\/\x
     x/\/\/\/\/\/\/\/\/\/\/\/\/\/\$
    $/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\.
   ./\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\+
  +/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\o
 o/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\O
                  /\/\    

5

জাভা

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;

import javax.imageio.ImageIO;


public class ChristmasTree {
    static class Point{
        Point(int a,int b){x=a;y=b;}
        int x,y;
        double distance(Point o){
            int dx=x-o.x;
            int dy=y-o.y;
            return Math.sqrt(dx*dx+dy*dy);
        }
    }
    static int siz;
    static BufferedImage b;
    static Random r=new Random();
    public static void main(String[]args) throws IOException{

        if(args.length==0){
            siz=(new Scanner(System.in)).nextInt();
        }else{
            siz=Integer.parseInt(args[0]);
        }
        b=new BufferedImage(20*siz,30*siz,BufferedImage.TYPE_INT_RGB);
        Graphics2D g=(Graphics2D)b.getGraphics();
        g.setColor(new Color(140,70,20));
        int h=b.getHeight();h*=0.4;
        for(int i=(int)(0.4*b.getWidth());i<(int)(0.6*b.getWidth());i++){
            if(r.nextDouble()<0.3){
                g.drawLine(i,b.getHeight(),i+r.nextInt(2)-1,h);
            }
        }
        for(int i=h;i<b.getHeight();i++){
            if(r.nextDouble()<0.3){
                g.drawLine((int)(0.4*b.getWidth()),i,(int)(0.6*b.getWidth()),i);
            }
        }
        for(int i=0;i<siz;i++){
            g.setColor(new Color(r.nextInt(4),150+r.nextInt(15),20+r.nextInt(7)));
            g.drawLine(b.getWidth()/2-(int)(b.getWidth()*0.42*i/siz),(int)(b.getHeight()*0.9)+r.nextInt(5)-2,b.getWidth()/2+(int)(b.getWidth()*0.42*i/siz),(int)(b.getHeight()*0.9)+r.nextInt(5)-2);
            g.setColor(new Color(r.nextInt(4),150+r.nextInt(15),20+r.nextInt(7)));
            g.drawLine(b.getWidth()/2-(int)(b.getWidth()*0.42*i/siz),(int)(b.getHeight()*0.9),b.getWidth()/2,(int)(b.getHeight()*(0.1+(.06*i)/siz)));
            g.setColor(new Color(r.nextInt(4),150+r.nextInt(15),20+r.nextInt(7)));
            g.drawLine(b.getWidth()/2+(int)(b.getWidth()*0.42*i/siz),(int)(b.getHeight()*0.9),b.getWidth()/2,(int)(b.getHeight()*(0.1+(.06*i)/siz)));
        }
        g.setColor(new Color(150,120,40));
        g.fillOval((b.getWidth()-siz-2)/2,b.getHeight()/10,siz+2,siz+2);
        g.setColor(new Color(250,240,80));
        g.fillOval((b.getWidth()-siz)/2,b.getHeight()/10,siz,siz);
        List<Color>c=Arrays.asList(new Color(0,255,0),new Color(255,0,0),new Color(130,0,100),new Color(0,0,200),new Color(110,0,200),new Color(200,205,210),new Color(0,240,255),new Color(255,100,0));
        List<Point>pts=new ArrayList<>();
        pts.add(new Point((b.getWidth()-siz)/2,b.getHeight()/10));
        loop:for(int i=0;i<8+siz/4;i++){
            int y=r.nextInt((8*b.getHeight())/11);
            int x=1+(int)(b.getWidth()*0.35*y/((8*b.getHeight())/11));
            x=r.nextInt(2*x)-x+b.getWidth()/2;
            y+=b.getHeight()/8;
            g.setColor(c.get(r.nextInt(c.size())));
            x-=siz/2;
            Point p=new Point(x,y);
            for(Point q:pts){
                if(q.distance(p)<1+2*siz)continue loop;
            }
            pts.add(p);
            g.fillOval(x,y,siz,siz);
        }
        ImageIO.write(b,"png",new File("tree.png"));
    }
}

নমুনা ফলাফল:

Size = 3:

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

Size = 4:

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

Size = 5:

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

Size = 12:

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

Size = 20:

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


1
আমি এর আগে খেয়াল করিনি। সুপার শীতল +1
একটি স্প্যাগেটো

4

Rebol

প্রতীকগুলি প্রদর্শনের জন্য একটি উপভাষা সহ। গাছের আকার পরিবর্তন করতে, কেবলমাত্র এর প্যারামিটারটি পরিবর্তন করুন make-tree

make-tree: func [int /local tr] [
  tr: copy []
  length: (int * 2) + 3
  repeat i int [
      repeat j 3 [
            ast: to-integer ((i * 2) - 1 + (j * 2) - 2)
            sp: to-integer (length - ast) / 2
            append/dup tr space sp 
            append/dup tr "*" ast 
            append tr lf
      ]
  ]
  append/dup tr space (length - 1) / 2
  append tr "|"
  append tr lf
  tr
]

print make-tree 3

3 স্তর সহ একটি গাছ 5 স্তর সহ একটি গাছ


3
আপনি কোথায় আকার নির্ধারণ করেছেন এবং এটি উত্পন্ন গাছকে কীভাবে প্রভাবিত করে?
manatwork

treeব্লকটি পরিবর্তন করতে আপনি এটির আকার পরিবর্তন করতে পারেন বা আপনার ইচ্ছায় কিছু প্রতীক পরিবর্তন করতে পারেন।
ওয়েইন চুই

@ ওয়াইনটসুই এটি অপের প্রয়োজনীয়তার সাথে সামঞ্জস্য করে না, "আকারটি কিছু ইনপুট পদ্ধতিতে বেছে নেওয়া উচিত
ulidtko

1
@ কালিস্ট থেকে একটি নতুন মেক-ট্রি ফাংশন
ওয়েন

4

পাইথন

import sys
w = sys.stdout.write
def t(n,s):
    for i in range(n):
        for a in range(n-i):
            w(" ")
        w("[")
        for l in range(i<<1):
            if i==n-1:
                w("_")
            else:
                w("~")
        w("]")
        print("")
    for o in range(s):
        for i in range(n):
            w(" ")
        print("[]")

t(10, 2)

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


1

টিআই-বেসিক 84

একটি আকার জিজ্ঞাসা:

              :
            Input 
           S:Lbl 1
            S-1→S
              :
             "||
            "+""→
           Str1:" 
             "→Str2
         :Disp Str2+
        "   **":Disp 
       Str2+"  "+"*"+
      Str1+"*":Disp " 
     "+Str1+"*-"+"||-*
    ":Disp Str1+"*--||-
   -*":Disp "   *---||--
  -*":Disp "  *----||----
 *":Disp Str1+"   "+Str2+"
":If S>0:Goto 2:Goto 1:Lbl 
              2

আউটপুট (আকার 1):

       **
      *||*
     *-||-*
    *--||--*
   *---||---*
  *----||----*
       ||

1
আকারটি বেছে নেওয়া যায় কোথায়? এটি একটি স্থির আকারের গাছ
জাস্টিন

1
@ কুইনকুনস ফিক্সড।
টিমটেক

4
-1; আপনি কেবল টিআই-বেসিক প্রোগ্রামে স্বেচ্ছাসেবী সন্নিবেশ করতে পারবেন না।
lirtosiast
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.