Guilloche ุจุทุฑูŠู‚ุฉ ู…ุฎุชู„ูุฉ

Guilloche ู‡ูˆ ู†ู…ุท ู…ู…ูŠุฒ ุนู„ู‰ ุงู„ู†ู‚ูˆุฏ ุงู„ูˆุฑู‚ูŠุฉ ูˆุงู„ุฃูˆุฑุงู‚ ุงู„ู…ุงู„ูŠุฉ ุงู„ุฃุฎุฑู‰. ูŠู…ูƒู† ุงู„ุนุซูˆุฑ ุนู„ู‰ ู‚ุตุฉ ู…ูุตู„ุฉ ุนู†ู‡ุง ู…ุน ุงู†ุญุฏุงุฑ ููŠ ุงู„ุชุงุฑูŠุฎ ููŠ ุงู„ู…ู‚ุงู„ุฉ ุงู„ุณุงุจู‚ุฉ . ูƒู…ุง ุชู… ุฃูŠุถู‹ุง ุฅุนุทุงุก ุฎูˆุงุฑุฒู…ูŠุฉ ุฑุณู… ุชุจู†ูŠ ู†ู‚ุงุท ุฃู…ุงู† ุจุงู„ู†ู‚ุงุท.

ู„ุง ูุงุฆุฏุฉ ู…ู† ุฐู„ูƒ ุŒ ูŠุฌุจ ุฃู† ู†ู„ุงุญุธ ุฅุฐุง ู‚ู…ู†ุง ุจุฑุณู…ู‡ุง ู„ูŠุณ ู„ู„ู…ุชุนุฉ ูู‚ุท ุŒ ูˆู„ูƒู† ู„ู„ุฃุบุฑุงุถ ุงู„ุนู…ู„ูŠุฉ - ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ู„ุฅุถุงูุฉ ุชู„ูƒ ุงู„ุฃูˆุฑุงู‚ ุงู„ู…ุงู„ูŠุฉ ุฅู„ู‰ ุงู„ุชุตู…ูŠู…. ุณุชุจุทุฆ ุขู„ุงู ุงู„ู†ู‚ุงุท ุงู„ู…ุญุฑุฑ ูู‚ุท ุŒ ู„ูƒู†ู‡ุง ู„ู† ุชูƒูˆู† ู‚ุงุฏุฑุฉ ุนู„ู‰ ุนุฑุถ ุงู„ู†ุชูŠุฌุฉ ุนู„ู‰ ุฃูŠ ุญุงู„ - ุจุฏู„ุงู‹ ู…ู† ุงู„ุฎุทูˆุท ุงู„ู…ุณุชู…ุฑุฉ ุงู„ุญู‚ูŠู‚ูŠุฉ ุŒ ุณูŠูƒูˆู† ู‡ู†ุงูƒ ู†ูˆุน ู…ู† ู†ุชูŠุฌุฉ ู…ุชูˆุณุท โ€‹โ€‹ุงู„ู†ู‚ุงุท ุŒ ูŠุชู… ุฅุฌุฑุงุคู‡ุง ูƒู…ุง ุณูŠุถุน ุงู„ู„ู‡ ุฑูˆุญู‹ุง.

ู„ุฐู„ูƒ ุŒ ุญุงู† ุงู„ูˆู‚ุช ู„ู„ุชููƒูŠุฑ ููŠ ุฎูˆุงุฑุฒู…ูŠุฉ ุฃุฎุฑู‰ - ูˆุงู„ุชูŠ ุณุชุนุทูŠ ู†ุงู‚ู„ุงุช ุนู„ู‰ ุงู„ููˆุฑ. ู†ุธุฑู‹ุง ู„ุฃู†ู‡ ููŠ ุงู„ู…ุญุฑุฑูŠู† ุงู„ู…ุดู‡ูˆุฑูŠู† ู„ู„ุฎุทูˆุท ุงู„ู…ู†ุญู†ูŠุฉ ูŠูู‚ุชุฑุญ ูู‚ุท ุงู„ุงุณุชูŠูุงุก ุจูˆุงุณุทุฉ ู…ู†ุญู†ูŠุงุช Bezier ุŒ ุณู†ุฑูƒุฒ ุนู„ูŠู‡ุง.

ุงู„ุฎูˆุงุฑุฒู…ูŠุฉ ุŒ ููŠ ุงู„ูˆุงู‚ุน ุŒ ุจุณูŠุทุฉ - ูˆุฃุจุณุท ุจูƒุซูŠุฑ ู…ู…ุง ุชู… ูˆุตูู‡ ููŠ ุงู„ุฌุฒุก ุงู„ุฃูˆู„. ู†ุฃุฎุฐ ู…ู†ุญู†ูŠ ู…ุธุฑูˆููŠู† ุŒ ูˆู†ุญุฏุฏ ุนุฏุฏ ุงู„ู…ูˆุฌุงุช ุงู„ุชูŠ ูŠุฌุจ ุฃู† ุชุชู†ุงุณุจ ู…ุน 360 ุฏุฑุฌุฉ ุŒ ูˆู†ู‚ุฏุฑ ุนู†ุฏ ุฃูŠ ุฒุงูˆูŠุฉ ูˆุจุฃูŠ ุงู†ุญู†ุงุก ูŠุฌุจ ุฃู† ูŠู†ุชู‚ู„ ุงู„ุบูŠู„ูˆุชุดูŠ ุงู„ุญู‚ูŠู‚ูŠ ู…ู† ุงู„ู†ู‚ุทุฉ ุงู„ุญุงู„ูŠุฉ ุฅู„ู‰ ุงู„ุชุงู„ูŠุฉ ุŒ ูˆู†ู‚ูˆู… ุจุงุณุชูƒู…ุงู„ู‡ ุจุฃุฑุจุนุฉ ู…ู†ุญู†ูŠุงุช ุจูŠุฒูŠูŠู‡.

ู‡ู†ุง ุจุฑู†ุงู…ุฌ ููŠ Asymptote ุŒ ูˆู‡ูˆ ู…ู„ุงุฆู… ู„ู„ุบุงูŠุฉ ู„ู…ุซู„ ู‡ุฐู‡ ุงู„ุฃุดูŠุงุก.

import graph;

size(1000,1000);
xaxis(ticks=Ticks);
yaxis(ticks=Ticks);

defaultpen(2);

var zero = (0,0);

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

//         
// 0..180 -> 0..1
real tens(bool at_top, real angle)
{
  return angle/180;
}

guide wave(path top, path bottom, int parts, real offset)
{
  guide w;
  real step = 1/parts;
  real half = step/2;

  pair[] top_pt;
  pair[] bot_pt;

  pair[] top_dir;
  pair[] bot_dir;

  //   
  real[] top_angle;
  real[] bot_angle;

  for(int i: sequence(0,parts-1))
  {
    real rel = i*step + step*offset;

    real top_time = reltime(top, rel);
    real bot_time = reltime(bottom, rel+half);

    //   
    top_pt[i] = point(top, top_time);
    bot_pt[i] = point(bottom, bot_time);

    //       rel
    top_dir[i] = dir(top, top_time);
    bot_dir[i] = dir(bottom, bot_time);
  }

  for(int i: sequence(0,parts-1))
  {
    int prev = i == 0 ? parts-1 : i-1;
    int next = i == parts-1 ? 0 : i+1;

    // t: t[i]--b[i] /\ t[i]--b[prev]

    var v1 = bot_pt[i] - top_pt[i];
    var v2 = bot_pt[prev] - top_pt[i];
    var a = degrees(v2) - degrees(v1);

    top_angle[i] = a<0 ? 360+a : a;

    // b: b[i]--t[i] /\ b[i]--t[next]
    v1 = top_pt[i] - bot_pt[i];
    v2 = top_pt[next] - bot_pt[i];
    a = degrees(v2) - degrees(v1);

    bot_angle[i] = a<0 ? 360+a : a;
  }

  for(int i: sequence(0,parts-1))
  {
    int next = i == parts-1 ? 0 : i+1;

    var l1 = length(top_pt[i]--bot_pt[i]);
    pair ctl1 = top_pt[i] + top_dir[i] * tens(true, top_angle[i]) * l1;
    pair ctl2 = bot_pt[i] - bot_dir[i] * tens(false, bot_angle[i]) * l1;

    w = w .. top_pt[i] .. controls ctl1 and ctl2 .. bot_pt[i];

    var l2 = length(bot_pt[i]--top_pt[next]);
    ctl1 = bot_pt[i] + bot_dir[i] * tens(false, bot_angle[i]) * l2;
    ctl2 = top_pt[next] - top_dir[next] * tens(true, top_angle[next]) * l2;

    w = w .. bot_pt[i] .. controls ctl1 and ctl2 .. top_pt[next];
  }

  return w;
}

//   ,  
void repeat(int count, path top, path bottom, int parts)
{
  real step = 1/count;
  for(int i: sequence(0, count-1))
  {
    draw(wave(top, bottom, parts, step*i));
  }
}

//            
//                
path normalize(path p)
{
  var min = min(p);
  var max = max(p);
  var top_center = min + ((max.x-min.x)/2, (max.y-min.y)/2);
  return scale(20*1/(max-min).x)*shift(zero - top_center)*p;
}

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

//  3 -   ,     
path top = (338.499521684,-159.274266483)
     ..controls (327.252951684,-158.148796483) and (323.448961684,-145.618286483) .. (318.743661684,-137.260595483)
     ..controls (309.897671684,-123.808725483) and (292.025851684,-123.657732483) .. (278.251471684,-118.807470483)
     ..controls (272.669581684,-117.510629483) and (268.731931684,-109.221757483) .. (274.571781684,-105.645360483)
     ..controls (281.545351684,-101.031122483) and (290.488261684,-97.7906864833) .. (293.317871684,-89.0437964838)
     ..controls (296.611021684,-81.8498064838) and (293.894071684,-73.5853264838) .. (295.556161684,-66.3445764838)
     ..controls (299.563831684,-59.7686064838) and (308.181311684,-64.5344964838) .. (312.903811684,-67.4344264838)
     ..controls (325.368171684,-74.9872364838) and (341.157891684,-80.6126364838) .. (355.257331684,-73.9383264838)
     ..controls (363.506651684,-70.9246164838) and (370.115991684,-63.9703964838) .. (378.731941684,-62.0926264838)
     ..controls (384.688491684,-61.4010364838) and (389.980631684,-67.6129964838) .. (387.306161684,-73.3211464838)
     ..controls (385.256921684,-82.8346964838) and (388.441441684,-93.9447564833) .. (397.757331684,-98.3016064833)
     ..controls (403.144721684,-101.085582483) and (412.671611684,-104.606352483) .. (410.331551684,-112.414892483)
     ..controls (406.654931684,-119.718595483) and (396.921641684,-119.937732483) .. (390.144051684,-122.524267483) 
     ..controls (378.065751684,-125.483516483) and (364.313841684,-130.717262483) .. (359.884541684,-143.562216483)
     ..controls (356.731021684,-151.157386483) and (350.818391684,-160.192046483) .. (341.435061684,-159.293796483)
     ..controls (340.456461684,-159.306096483) and (339.478031684,-159.281196483) .. (338.499521684,-159.274296483)
    --cycle;

top = normalize(top);
bottom = scale(0.5)*top;

//  2 -  
top = ellipse(zero, 4, 6);
bottom = ellipse(zero, 2, 3);

//   1,  ,   

top = circle(zero, 5);
bottom = circle(zero, 3);

// 12 ,      8 
// top -  , bottom - 
repeat(12, top, bottom, 8);

//   
//draw(top, red);
//draw(bottom, red);

ุงู„ุญุงู„ุฉ ุงู„ุฃูƒุซุฑ ูู‡ู…ู‹ุง ู‡ูŠ ุนู†ุฏู…ุง ุชู‚ุน ุงู„ุฌูŠูˆุจ ุงู„ุฃู†ููŠุฉ ุจูŠู† ุฏุงุฆุฑุชูŠู†.

ุตูˆุฑุฉ

ุงู„ู‚ุถูŠุฉ ุฃูƒุซุฑ ุฏู‡ุงุก - ุนู„ุงู…ุงุช ุงู„ุญุฐู ุจุฏู„ุง ู…ู† ุงู„ุฏูˆุงุฆุฑ.

ุตูˆุฑุฉ

ูˆุตูˆุฑุฉ ู‚ุฑูŠุจุฉ ู…ู† ุงู„ุงุณุชุฎุฏุงู… ุงู„ุตู†ุงุนูŠ: ู…ู‚ุตู„ุฉ ุŒ ุชุดูƒู„ ู†ูˆุนู‹ุง ู…ู† ุงู„ู…ุฎุฑุฌ ุงู„ูู†ูŠ.

ุตูˆุฑุฉ

ูˆู„ูƒู† ุงู„ู†ุชูŠุฌุฉ ู‡ู†ุง ู„ูŠุณุช ู…ุซุงู„ูŠุฉ. ุฃูˆู„ุงู‹ ุŒ ูŠุฌุจ ุชุนุฏูŠู„ ูˆุธูŠูุฉ ุงู„ุนุดุฑุงุช ุจุญูŠุซ ุชุนูˆุฏ ุฏุงุฆู…ู‹ุง ุจู€ "ุชูˆุชุฑ" ุซุงุจุช ูŠุจู„ุบ 0.5. ูˆุซุงู†ูŠู‹ุง ุŒ ุงู„ู…ู†ุญู†ูŠุงุช ู„ูŠุณุช ู…ุชู†ุงุธุฑุฉ ู„ู„ุบุงูŠุฉ ุŒ ูˆููŠ ุงู„ุฌุฒุก ุงู„ุฃูŠุณุฑ ุจุงู„ู‚ุฑุจ ู…ู† ุงู„ู…ุญูˆุฑ X ูŠุชู… ุงู„ุฎู„ุท ุจูŠู†ู‡ุง ุจุทุฑูŠู‚ุฉ ุฃูˆ ุจุฃุฎุฑู‰. ุจุงู„ุทุจุน ุŒ ูŠู…ูƒู† ุชุตุญูŠุญ ูƒู„ ู‡ุฐุง ูŠุฏูˆูŠู‹ุง ุŒ ุฎุงุตุฉู‹ ุฅุฐุง ู‚ู…ุช ุจุนู…ู„ ุฃูˆุฑุงู‚ ู†ู‚ุฏูŠุฉ ู„ู„ุฏูˆู„ุฉ ูˆู„ุฏูŠูƒ ูู†ุงู†ูŠู† ู…ุคู‡ู„ูŠู† ู„ู„ุบุงูŠุฉ ุŒ ูˆู„ูƒู† ูŠู…ูƒู†ูƒ ู…ุญุงูˆู„ุฉ ุฒูŠุงุฏุฉ ุฏู‚ุฉ ุงู„ุญุณุงุจุงุช ุŒ ู„ุฃู†ู‡ุง ู…ู† ุงู„ูˆุงุถุญ ุฃู†ู‡ุง ุชุถู„ ููŠ ุจุนุถ ุงู„ู†ู‚ุงุท ุญูŠุซ ูŠุชุบูŠุฑ ุงู†ุญู†ุงุก ุงู„ู…ุบู„ูุงุช ุจุดูƒู„ ุญุงุฏ.

ุจู…ุง ุฃู† ุงู„ุบู„ุงูŠุงุช ู…ุญุฑูุฉ ุŒ ูุฅู† ุงู„ุณุคุงู„ ุงู„ุฐูŠ ูŠุทุฑุญ ู†ูุณู‡: ู‡ู„ ูŠุชุทุงุจู‚ูˆู† ุŒ ุฅุฐุง ุฌุงุฒ ุงู„ุชุนุจูŠุฑ ุŒ "ุญู‚ูŠู‚ูŠ" ุŒ ุฃูŠ ู…ุฑุณูˆู…ู‹ุง ุจุงู„ู†ู‚ุงุท. ู„ูƒูˆู†ูŠ ุฌุฏูŠุฏู‹ุง ููŠ ุงู„ู‡ู†ุฏุณุฉ ุงู„ุชูุงุถู„ูŠุฉ ุŒ ุฃุฌุฏ ุตุนูˆุจุฉ ููŠ ุงู„ู‚ูˆู„ ุŒ ูˆู„ูƒู† ุจุฏู„ุงู‹ ู…ู† "ู„ุง" ุจุฏู„ุงู‹ ู…ู† "ู†ุนู…".

ู„ูƒู† ู…ู† ูŠุฑู‰ ุงู„ูุฑู‚ ุญู‚ู‹ุงุŸ

ูˆุงู„ูุงุฆุฏุฉ ุงู„ุนู…ู„ูŠุฉ ู„ุง ูŠู…ูƒู† ุฅู†ูƒุงุฑู‡ุง - ู…ุน ุจุถุน ุนุดุฑุงุช ู…ู† ู…ู†ุญู†ูŠุงุช Bezier ุŒ ูุฅู† ุงู„ุนู…ู„ ุฃุณู‡ู„ ุจูƒุซูŠุฑ ู…ู† ุฃู„ู ู†ู‚ุทุฉ ุŒ ูˆูŠูุชุญูˆู† ุงู„ู…ุฒูŠุฏ ู…ู† ุฅู…ูƒุงู†ูŠุงุช ุงู„ุชุตู…ูŠู….

ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ุฐู„ูƒ ุŒ ูŠู…ูƒู† ุฃูŠุถู‹ุง ุชุญุณูŠู† ู‡ุฐู‡ ุงู„ุฎูˆุงุฑุฒู…ูŠุฉ. ูŠู‚ุชุฑุญ ุฎูŠุงุฑุงู† ุนู„ู‰ ุงู„ููˆุฑ:

ุฃ) ุชุญุฏูŠุฏ ุนุฏุฏ ู…ุฎุชู„ู ู…ู† ุงู„ู†ู‚ุงุท ุนู„ู‰ ุงู„ู…ู†ุญู†ู‰ ุงู„ุฎุงุฑุฌูŠ ูˆุงู„ุฏุงุฎู„ูŠ ุŒ ุซู… ู„ู† ูŠุชู… ุฅู†ุดุงุก ุชุฃุซูŠุฑ ุทุญู† ุงู„ู†ู…ุท ุงู„ุฃู‚ุฑุจ ุฅู„ู‰ ุงู„ู…ุฑูƒุฒ ุŒ ูƒู…ุง ู‡ูˆ ุงู„ุญุงู„ ููŠ ุงู„ุฃู…ุซู„ุฉ ุฐุงุช ุงู„ุฏุงุฆุฑุฉ ูˆุงู„ู‚ุทุน ุงู„ู†ุงู‚ุต.

ุจ) ุถุน ุงู„ู†ู‚ุงุท ุนู„ู‰ ุงู„ุฃุธุฑู ู„ูŠุณ ุจุงู„ุชุณุงูˆูŠ ุŒ ูˆู„ูƒู† ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุฌุนู„ู‡ุง ููŠ ูƒุซูŠุฑ ู…ู† ุงู„ุฃุญูŠุงู† ุŒ ุฃู‚ู„ ููŠ ูƒุซูŠุฑ ู…ู† ุงู„ุฃุญูŠุงู† ุŒ ู…ู…ุง ุณูŠุถูŠู ุจุนุฏู‹ุง ุฌุฏูŠุฏู‹ุง ู„ู„ู†ู…ุท.

All Articles