3D Â÷Æ®

Â÷Æ®¸¦ 3D·Îµµ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. ¿¡¸®¾îÀÇ Area3DStyle °´Ã¼°¡ 3D Ãâ·Â °ü·Ã ±â´ÉÀ» Á¦°øÇÏ¸ç ´ÙÀ½°ú °°Àº ¼Ó¼ºÀ» °¡Áø´Ù.

 

¼Ó¼º

¼³¸í

Enable3D

3Â÷¿ø Ãâ·Â ±â´ÉÀ» »ç¿ëÇÑ´Ù. µðÆúÆ® °ªÀÌ false¿©¼­ º°´Ù¸¥ ÁöÁ¤ÀÌ ¾øÀ¸¸é 2D·Î Ãâ·ÂµÈ´Ù. ÀÌ °ªÀ» true·Î ¹Ù²Ù¾î¾ß 3DÂ÷Æ®°¡ ³ªÅ¸³­´Ù.

Inclination

¼öÆòÃà¿¡¼­ÀÇ È¸Àü °¢µµ¸¦ ÁöÁ¤ÇÑ´Ù. µðÆúÆ®´Â À§¿¡¼­ ¾Æ·¡·Î ³»·Áº¸´Â 30µµ·Î µÇ¾î ÀÖ´Ù.

Rotation

¼öÁ÷Ãà¿¡¼­ÀÇ È¸Àü °¢µµÀÌ´Ù. µðÆúÆ®´Â ¿À¸¥ÂÊ¿¡¼­ ¿ÞÂÊÀ» ¹Ù¶óº¸´Â 30µµ·Î µÇ¾î ÀÖ´Ù. À½¼ö °¢µµÀÌ¸é º®ÀÌ ¿À¸¥ÂÊÀ¸·Î À̵¿ÇÑ´Ù.

Perspective

¿ø±Ù°¨À» ÁöÁ¤ÇÑ´Ù. ±×¸®µå ¼±ÀÌ ÆòÇàÇÏÁö ¾Ê°í ±¸¼®ÀÇ ¼Ò½ÇÁ¡À» ÇâÇÏ´Â Çü½ÄÀÌ µÈ´Ù.

IsRightAngleAxes

isometric projection ±â¹ýÀ» »ç¿ëÇÑ´Ù. ÁøÂ¥ 3D´Â ¾Æ´ÏÁö¸¸ ƯÁ¤ ±íÀÌ¿¡¼­´Â °¡Àå ÀÚ¿¬½º·´´Ù. Perspective¿Í´Â ¹èŸÀûÀÌ´Ù.

WallWidth

º®ÀÇ µÎ²²¸¦ ÁöÁ¤ÇÑ´Ù.

PointDepth

µ¥ÀÌÅÍ Æ÷ÀÎÆ®ÀÇ ±íÀ̸¦ Æø¿¡ ´ëÇÑ ºñÀ²·Î ÁöÁ¤ÇÑ´Ù. 100%ÀÌ¸é ¸·´ë ±×·¡ÇÁ À­¸éÀÌ Á¤»ç°¢ÇüÀÌ¸ç ±×º¸´Ù ´õ ±íÀ¸¸é ¾ÈÂÊÀ¸·Î ±æÂßÇØÁø´Ù.

PointGapDepth

µ¥ÀÌÅÍ Æ÷ÀÎÆ®°£ÀÇ °£°ÝÀ» ÁöÁ¤ÇÑ´Ù. µÎ °³ÀÇ ¸·´ë ±×·¡ÇÁ¸¦ ¾Õ µÚ·Î ¹èÄ¡ÇßÀ» ¶§ ÀÌ ¼Ó¼º¿¡ µû¶ó ¸·´ë°£ÀÇ °Å¸®°¡ ´Þ¶óÁø´Ù.

IsClustered

¹Ù, Ä÷³ Â÷Æ®°¡ Ŭ·¯½ºÅÍ »óÅÂÀÎÁö¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ °ªÀÌ trueÀÌ¸é ¸·´ë¸¦ ³ª¶õÈ÷ ¹èÄ¡Çϰí falseÀÌ¸é ¾ÕµÚ·Î ¹èÄ¡ÇÑ´Ù.

 

¼Ó¼ºÀÇ Àǹ̸¦ ÀÐ¾î ºÁµµ ÀÌ °ªÀÌ Â÷Æ®ÀÇ ¾î¶² ¸é¿¡ ¿µÇâÀ» ¹ÌÄ¡´ÂÁö Á÷°üÀûÀ¸·Î ÆÄ¾ÇÇÏ±â ¾î·Æ´Ù. °°ÀÌ ÁöÁ¤ÇÒ ¼ö ¾ø´Â ¹èŸÀûÀÎ ¼Ó¼ºµµ ÀÖ°í Â÷Æ® ŸÀÔ¿¡ µû¶ó È¿°ú°¡ ¾à°£¾¿ ´Þ¶óÁö±âµµ ÇÑ´Ù.

ÀÌ·± º¹ÀâÇÑ ¼Ó¼ºÀº ±ÛÀ» Àоî ÀÌÇØÇÏ´Â °Íº¸´Ù´Â ½ÇÁ¦ °ªÀ» ¹Ù²ã °¡¸ç ´«À¸·Î È¿°ú¸¦ È®ÀÎÇØ º¸´Â °ÍÀÌ ÀÌÇØÇϱ⠽±´Ù. ´ÙÀ½ ¿¹Á¦´Â ÀÌ·± ¸ñÀûÀ¸·Î ¸¸µç °ÍÀ̸ç Űº¸µå·Î °¢ ¼Ó¼ºÀ» ½ÇÇàÁß¿¡ Á¶Á¤ÇØ º»´Ù. ¼Ò½º¸¦ º¸¸é °¢ ۰¡ ¾î¶² °ªÀ» Á¶Á¤ÇÏ´ÂÁö, °ªÀÇ ¹üÀ§´Â ¾î¶²Áö, µðÆúÆ®´Â ¹«¾ùÀÎÁö ¾Ë ¼ö ÀÖ´Ù.

 

private void Form1_Load(object sender, EventArgs e)

{

       chart1.Series.Add("");

       chart1.Series.Add("");

       Random R = new Random(100);

       double sale = 50;

       double cost = 30;

       double profit = 10;

       for (int i = 0; i < 10; i++)

       {

                  sale += R.Next(-4, 5);

                  chart1.Series[0].Points.AddY(sale);

                  cost += R.Next(-4, 5);

                  chart1.Series[1].Points.AddY(cost);

                  profit += R.Next(-4, 5);

                  chart1.Series[2].Points.AddY(profit);

       }

       chart1.Series[0].ChartType = SeriesChartType.Line;

       chart1.Series[0].Color = Color.Blue;

       chart1.Series[0].BorderWidth = 2;

       chart1.Series[1].ChartType = SeriesChartType.Column;

       chart1.Series[1].Color = Color.Red;

       chart1.Series[2].ChartType = SeriesChartType.Column;

       chart1.Series[2].Color = Color.Green;

 

       chart1.Focus();

}

 

private void chart1_KeyPress(object sender, KeyPressEventArgs e)

{

       ChartArea3DStyle a = chart1.ChartAreas[0].Area3DStyle;

       switch (e.KeyChar)

       {

                  case 'q':a.Inclination = Math.Min(a.Inclination + 5, 90); break;

                  case 'a':a.Inclination = Math.Max(a.Inclination -5, -90); break;

                  case 'w':a.Rotation = Math.Min(a.Rotation + 5, 180); break;

                  case 's':a.Rotation = Math.Max(a.Rotation - 5, -180);break;

                  case 'e': a.Perspective = Math.Min(a.Perspective + 5, 100); break;

                  case 'd': a.Perspective = Math.Max(a.Perspective - 5, 0); break;

                  case 'r': a.WallWidth = Math.Min(a.WallWidth + 2, 30); break;

                  case 'f': a.WallWidth = Math.Max(a.WallWidth - 2, 0); break;

                  case 't': a.PointDepth = Math.Min(a.PointDepth + 25, 1000); break;

                  case 'g': a.PointDepth = Math.Max(a.PointDepth - 25, 0); break;

                  case 'y': a.PointGapDepth = Math.Min(a.PointGapDepth + 25, 1000); break;

                  case 'h': a.PointGapDepth = Math.Max(a.PointGapDepth - 25, 0); break;

                  case 'z': a.Enable3D = !a.Enable3D;break;

                  case 'x':

                            a.Inclination = 30;

                            a.Rotation = 30;

                             a.Perspective = 0;

                            a.WallWidth = 7;

                            a.PointDepth = 100;

                            a.PointGapDepth = 100;

                            a.IsClustered = false;

                            a.IsRightAngleAxes = true;

                            break;

                  case 'c':a.IsClustered = !a.IsClustered;break;

                  case 'v':a.IsRightAngleAxes = !a.IsRightAngleAxes;break;

       }

 

       Text = String.Format("inc={0},rot={1},per={2},wall={3},dep={4},gap={5}",

                  a.Inclination, a.Rotation,a.Perspective, a.WallWidth,

                  a.PointDepth, a.PointGapDepth);

}

 

µÎ °³ÀÇ Ä÷³ ½Ã¸®Áî¿Í ÇѰ³ÀÇ ¶óÀÎ ½Ã¸®Á Â÷Æ®¿¡ Ç¥½ÃÇß´Ù. Űº¸µå ÀÔ·ÂÀ» ¹ÞÀ¸·Á¸é Â÷Æ®¿¡°Ô Æ÷Ä¿½º¸¦ ÁÖ¾î¾ß Çϸç KeyPress À̺¥Æ®¿¡¼­ ´­·¯Áø Ű¿¡ µû¶ó ¼Ó¼º°ªÀ» Á¶Á¤ÇÑ´Ù. 3D ¿É¼ÇÀ» ÁöÁ¤ÇÏÁö ¾Ê¾Æ óÀ½ ½ÇÇàÇϸé 2D·Î Ãâ·ÂµÈ´Ù.

ÀÌ »óÅ¿¡¼­ ۸¦ ´­·¯ ¼Ó¼ºÀ» Á¶Á¤ÇÏ¸ç °¢ ŰÀÇ ±â´ÉÀº ¼Ò½º¸¦ º¸¸é ¾Ë ¼ö ÀÖ´Ù. z۰¡ 3D ¿É¼ÇÀ» Åä±ÛÇϸç xŰ´Â ¸ðµç ¼Ó¼ºÀ» µðÆúÆ®·Î µÇµ¹¸°´Ù. Z۸¦ ´©¸£¸é 3D Â÷Æ®°¡ ³ªÅ¸³­´Ù.

Çϴÿ¡ ÆÄ¶õ ±¸¸§ÀÌ ¶° ÀÖ°í ¶¥¿¡ ¾ÆÆÄÆ® 2µ¿ÀÌ ÁÙ Áö¾î ¼­ ÀÖ´Ù. ÀÌ »óÅ¿¡¼­ qa, ws۸¦ ´­·¯ ¼öÆò, ¼öÁ÷ °¢µµ¸¦ Ʋ¸é ´Ù¸¥ °¢µµ¿¡¼­ ¹Ù¶óº¼ ¼ö ÀÖ´Ù. x۸¦ ´©¸£¸é ¾ðÁ¦µçÁö µðÆúÆ® ¿É¼ÇÀ¸·Î µ¹¾Æ°£´Ù.

ed, rfŰ´Â ¿ø±Ù°¨°ú º® µÎ²²¸¦ Á¶Á¤ÇÑ´Ù.

tg´Â ¸·´ëÀÇ µÎ²²¸¦ Á¶Á¤Çϰí yh´Â ¸·´ë°£ÀÇ °Å¸®¸¦ º¯°æÇÑ´Ù. °Å¸®¸¦ ÃæºÐÈ÷ ¶ç¿ì¸é µÎ Â÷Æ®°¡ °¢°¢ µû·Î ¹èÄ¡µÈ´Ù.

c۸¦ ´­·¯ Ŭ·¯½ºÅÍ »óÅ·Π¹èÄ¡ÇÏ¸é µÎ ¸·´ë°¡ ¾ÕµÚ°¡ ¾Æ´Ñ Á¿ì·Î ³ª¶õÈ÷ ¹è¿­µÈ´Ù. 2D¿¡¼­´Â ´ç¿¬È÷ ³ª¶õÈ÷ ¹èÄ¡ÇÒ ¼ö¹Û¿¡ ¾øÁö¸¸ 3D¿¡¼­´Â ¾ÕµÚ·Îµµ ¹èÄ¡ÇÒ ¼ö ÀÖ´Ù.

v۸¦ ´­·¯ IsRightAngleAxes ¿É¼ÇÀ» Åä±ÛÇÏ¸é °¢µµ°¡ Â÷Æ®¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â ¹æ½ÄÀÌ ´Þ¶óÁø´Ù. °¢µµ¸¦ ¹Ù²ã °¡¸ç Â÷Æ®¸¦ ȸÀü½Ãų ¶§´Â ÀÌ ¿É¼ÇÀ» ²ô´Â °ÍÀÌ ´õ ÀÚ¿¬½º·´´Ù.

ÀÌ ¿¹Á¦¸¦ ÅëÇØ 3D Â÷Æ®ÀÇ °¢ ¼Ó¼ºÀÌ ¾î¶² ¿µÇâÀ» ¹ÌÄ¡´ÂÁö ¿¬±¸ÇØ º¸°í ¸ñÀû¿¡ µü ¸Â´Â ¿É¼ÇÀ» ã¾Æ Àû¿ëÇÏ¸é µÈ´Ù. ¸»·Î ¼³¸íÇÏ´Â °Íº¸´Ù´Â ÈξÀ ´õ Á÷°üÀûÀ¸·Î ÀÌÇØÇÒ ¼ö ÀÖ°í ¿É¼Ç°£ÀÇ Á¶ÇÕ È¿°ú¸¦ Å×½ºÆ®Çϱ⵵ ½±´Ù.

 

ÀÌ»óÀ¸·Î Â÷Æ® ÄÁÆ®·Ñ¿¡ ´ëÇÑ °­Á¸¦ ¸¶Ä£´Ù. °³¹ßÅø¿¡ ±âº» Æ÷ÇÔµÈ ÄÁÆ®·ÑÀ̶ó±â¿¡´Â ±â´ÉÀÌ ´Ùä·Ó°í ¾ÈÁ¤¼ºÀ̳ª ¼º´Éµµ ÃæºÐÈ÷ ¸¸Á·ÇÒ¸¸ÇÑ ÄÁÆ®·ÑÀÌ´Ù. ¾çÀÌ Á» ¸¹Áö¸¸ ÃæºÐÇÑ ½Ã°£À» ÅõÀÚÇÏ¿© Àß ¿¬±¸ÇØ µÎ¿ö µÎ¸é ½Ç¹«¿¡ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.