ľÀþ¤ÈÅÀ¤È¤Îµ÷Î¥¤òµá¤á¤ë
ÃηÃÂޤˡ¢Ä¾Àþ¤ÈÅÀ¤È¤Îµ÷Î¥¤òµá¤á¤ë¤Ë¤Ï¤É¤¦¤¹¤ë¤«¤È¤¤¤¦¼ÁÌ䤬¤¢¤Ã¤¿¤Î¤Ç¡¢C¸À¸ì¤Ç½ñ¤¤¤Æ¤ß¤¿¤é¡¢ºÇ½ªÅª¤Ë¡¢¤³¤ó¤Ê´¶¤¸¤Ë¤Ê¤Ã¤¿¡£
¸ø¼°¤Ê¤É¤ÏÄ´¤Ù¤¿¤éʬ¤ë¤È»×¤¦¤Î¤ÇÀâÌÀ¤Ï¾Ê¤¯¡£Ã±¤Ë¸ø¼°¤ËÅö¤Æ¤Ï¤á¤Æ¤¤¤ë¤è¤¦¤Ê¤â¤Î¤Ç¤¢¤ë¡£ ¤È¤³¤í¤Ç¡¢¤³¤ì¤Ï¼Â¤ÏÅê¹Æ¸å¤Ë½¤Àµ¤·¤¿¤Î¤Ç¤¢¤ë¡£ ¸·Ì©¤Ë¤¤¤¨¤ÐºÙ¤«¤¤¤È¤³¤í¤Ï°ã¤Ã¤Æ¤¤¤ë¤¬¡¢ ½¤ÀµÁ°¤Î¥í¥¸¥Ã¥¯¤Î°ìÉô¤Ï¼¡¤Î¤è¤¦¤Ê´¶¤¸¤À¤Ã¤¿¡£#include <math.h> double distance(double lineX1, double lineY1, double lineX2, double lineY2, double dotX, double dotY) { double a, b, c; /* ax + by + c = 0 */ double root; double dist; /* µá¤á¤ëµ÷Î¥ */ a = lineY1 - lineY2; b = lineX2 - lineX1; c = (-b * lineY1) + (-a * lineX1); root = sqrt(a*a + b*b); if (root == 0.0) { return -1.0; /* µá¤á¤é¤ì¤Ê¤¤¾ì¹ç¤ÏÉé¤ÎÃͤòÊÖ¤¹ */ } dist = ((a * dotX) + (b * dotY) + c) / root; if (dist < 0.0) { dist = -dist; } return dist; }
a = lineY1 - lineY2; b = lineX2 - lineX1; if (a == 0.0 && b == 0.0) { return -1.0; /* µá¤á¤é¤ì¤Ê¤¤¾ì¹ç¤ÏÉé¤ÎÃͤòÊÖ¤¹ */ } c = (-b * lineY1) + (-a * lineX1); root = sqrt(a*a + b*b); dist = ((a * dotX) + (b * dotY) + c) / root;
½¤Àµ¤·¤¿Íýͳ¤Ï¡¢a == 0.0 && b == 0.0 ¤¬À®Î©¤·¤Ê¤¯¤Æ¤â¡¢sqrt(a*a + b*b) ¤¬ 0.0 ¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ë¤À¤í¤¦¤È¹Í¤¨¤¿¤«¤é¤Ç¤¢¤ë¡£ a ¤â b ¤â 0.0 ¤Ë¶Ë¤á¤Æ¶á¤¤¾ì¹ç¤Ë a*a ¤â b*b ¤â 0.0 ¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦²ÄǽÀ¤¬¤¢¤ë¤«¤é¡¢¤ª¤½¤é¤¯¤³¤ÎȽÃǤÏÀµ¤·¤¤¡£
½¤ÀµÁ°¤Î¥í¥¸¥Ã¥¯¤Ï¡¢sqrt ¤Î½èÍý¤ÏÈæ³ÓŪ½Å¤¤¤À¤í¤¦¤È¹Í¤¨¤Æ¡¢¸Æ¤Ó½Ð¤¹Á°¤Ë¥¨¥é¡¼¤Ë¤Ê¤ë¾ì¹ç¤òȽÄꤷ¤è¤¦¤È¹Í¤¨¤¿¤Î¤À¡£ ¤À¤«¤é¡¢¤³¤ÎȽÄê¤Ï c ¤ò·×»»¤¹¤ëÁ°¤Ë¹Ô¤Ã¤Æ¤¤¤ë¡£¥¨¥é¡¼¤Ë¤Ê¤ë¤Î¤Ê¤é¡¢È½ÄêÁ°¤Ë c ¤ò·×»»¤¹¤ë¤Î¤Ï̵Â̤À¡£
¤È¤³¤í¤Ç¡¢sqrt(x) ¤Ë¤ª¤¤¤Æ¡¢x > 0 ¤Ç¤¢¤ì¤Ð¡¢sqrt(x) > 0 ¤Ç¤¢¤ë¤³¤È¤ÏÊݾڤµ¤ì¤ë¤«? ¤â¤·¤½¤ÎÊݾڤ¬¤¢¤ì¤Ð¡¢sqrt ¤ò¸Æ¤Ó½Ð¤¹Á°¤Ë¡¢a*a + b*b ¤ÎÃͤ¬ 0.0 ¤«¤É¤¦¤«¤òÈæ³Ó¤·¤¿»þÅÀ¤Ç¥¨¥é¡¼¥Á¥§¥Ã¥¯¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
³Î¤«¤á¤Æ¤ß¤ë¤È¡¢ISO ¤Î draft (2007/9/7ÈÇ) ¤ò¸«¤Æ¤â¡¢°ú¿ô¤¬ less than zero ¤À¤È domain error ¤Ë¤Ê¤ë¤È½ñ¤¤¤Æ¤¢¤ë¤¬¡¢¤½¤ì¤À¤±¤Ç¤¢¤ë¡£ ¿ô³ØŪ¤Ë¤Ï¡¢0 < x < 1 ¤Î¾ì¹ç¤Ë¡¢x < ¢åx ¤¬À®¤êΩ¤Ä¤Î¤À¤«¤é¡¢x > 0 ¤Ç¤¢¤ì¤Ð sqrt(x) > 0 ¤âÀ®¤êΩ¤Ã¤ÆÍߤ·¤¤¤Î¤À¤¬¡¢0¤Ë¶Ë¤á¤Æ¶á¤¤Ãͤ¬Í¿¤¨¤é¤ì¤¿¤È¤¤Ë¡¢¼ÂÁõ¤ÎÀ©¸Â¤Ë¤è¤Ã¤Æ0¤¬ÊÖ¤µ¤ì¤ë²ÄǽÀ¤¬¤¢¤ë¤«¤É¤¦¤«¡¢¤½¤³¤¬¤É¤¦¤âʬ¤é¤Ê¤¤¡£
¤È¤¤¤¦¤³¤È¤Ç¡¢³Î¼Â¤Ê¤Î¤Ï sqrt ¤òµá¤á¤¿¸å¤Ë 0.0 ¤ÈÈæ³Ó¤¹¤ë¤³¤È¤À¤í¤¦¤È¤¤¤¦·ëÏÀ¤Ë»ê¤Ã¤¿¤Î¤Ç¤¢¤ë¡£
- 2012.10.12 Friday
- C¸À¸ì
- 11:07
- comments(0)
- trackbacks(0)
- by phinloda