線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:822
推到 Plurk!
推到 Facebook!

[問題]Image中的一條直線為13等分的點該如何取?

尚未結案
plihui
初階會員


發表:88
回覆:96
積分:41
註冊:2003-07-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-10 19:55:31 IP:218.168.xxx.xxx 未訂閱
請問大家1個不知道算不算簡單還是複雜的問題 今天在TImage有一條直線(可能是曲線) 問題來了... 大家都知道Image1->Canvas->Pixels[x][y] 其中x,y預設均為整數 比如說好了:一條線段長100,要取13個等分的點 即0,100/13,200/13,...類推 總是找不到剛剛好100/13或是200/13之類的點 於是程式陷入無窮回圈,請問該如何解啊?
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-10 21:09:43 IP:211.76.xxx.xxx 未訂閱
plihui 您好:    這問題仔細看來還蠻有趣的。 我個人的想法是這樣的: 假設以直線來說,您恐怕要先算出這條直線所有會經過的點(存成陣列),接下來有兩種方法算出可能的等分點(由於取整數值的關係,只能盡量接近), >
plihui
初階會員


發表:88
回覆:96
積分:41
註冊:2003-07-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-10 22:16:19 IP:61.216.xxx.xxx 未訂閱
引言: plihui 您好: 這問題仔細看來還蠻有趣的。 我個人的想法是這樣的: 假設以直線來說,您恐怕要先算出這條直線所有會經過的點(存成陣列),接下來有兩種方法算出可能的等分點(由於取整數值的關係,只能盡量接近), > >< face="Verdana, Arial, Helvetica"> 感激R大的提示: 我寫了1小段程式 能否請R大解出無窮回圈之謎啊 還望R大和大家多多指導 呢
typedef struct
{
 int x;
 int y;
 double arc;
 }edgept;
void EQU()
{
  //重新將輪廓等成256分
   int i=0,j=0;
   double perimeter=0;//總弧長
   int x1,y1,x2,y2;
   edgept ep;
   int total_edpt=contour_x->Count;//所有線上總點數假設50
   vector boundary;
   double l=0;
    for(i=0;iStrings[i]);//用來存直線所有點X座標
         ep.y=StrToInt(contour_y->Strings[i]);//存Y座標
        if(i==0)
        {
         ep.arc=0;
         perimeter=0;
         l=0;
        }
        else
        {
         x1=StrToInt(contour_x->Strings[i]);
         x2=StrToInt(contour_x->Strings[i-1]);
         y1=StrToInt(contour_y->Strings[i]);
         y2=StrToInt(contour_y->Strings[i-1]);
         perimeter =sqrt(fabs(pow(x1-x2,2) pow(y1-y2,2)));
         l=perimeter;
         ep.arc=l/256;
         }
         boundary.push_back(ep);
       }
       int n=1;
       double ee=0;
       for(i=0;i     
        
plihui
初階會員


發表:88
回覆:96
積分:41
註冊:2003-07-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-10 22:16:47 IP:61.216.xxx.xxx 未訂閱
引言: plihui 您好: 這問題仔細看來還蠻有趣的。 我個人的想法是這樣的: 假設以直線來說,您恐怕要先算出這條直線所有會經過的點(存成陣列),接下來有兩種方法算出可能的等分點(由於取整數值的關係,只能盡量接近), > >< face="Verdana, Arial, Helvetica"> 感激R大的提示: 我寫了1小段程式 能否請R大解出無窮回圈之謎啊 還望R大和大家多多指導 呢
typedef struct
{
 int x;
 int y;
 double arc;
 }edgept;
void EQU()
{
  //重新將輪廓等成256分
   int i=0,j=0;
   double perimeter=0;//總弧長
   int x1,y1,x2,y2;
   edgept ep;
   int total_edpt=contour_x->Count;//所有線上總點數假設50
   vector boundary;
   double l=0;
    for(i=0;iStrings[i]);//用來存直線所有點X座標
         ep.y=StrToInt(contour_y->Strings[i]);//存Y座標
        if(i==0)
        {
         ep.arc=0;
         perimeter=0;
         l=0;
        }
        else
        {
         x1=StrToInt(contour_x->Strings[i]);
         x2=StrToInt(contour_x->Strings[i-1]);
         y1=StrToInt(contour_y->Strings[i]);
         y2=StrToInt(contour_y->Strings[i-1]);
         perimeter =sqrt(fabs(pow(x1-x2,2) pow(y1-y2,2)));
         l=perimeter;
         ep.arc=l/256;
         }
         boundary.push_back(ep);
       }
       int n=1;
       double ee=0;
       for(i=0;i     
        
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-11 00:11:47 IP:211.76.xxx.xxx 未訂閱
phihui 您好:    不好意思,為節省篇幅截取您的部分程式。
         perimeter =sqrt(fabs(pow(x1-x2,2) pow(y1-y2,2)));
         l=perimeter;
         ep.arc=l/256; //此處您應該是要記錄從起點到目前這點的總弧長,再參看您後面的判斷式,覺得應該不必除以256。
         }
         boundary.push_back(ep);
       }
       int n=1;
       double ee=0;
       for(i=0;i
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
系統時間:2024-07-01 1:55:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!