plihui
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:88 回覆:96 積分:41 註冊:2003-07-03
發送簡訊給我
|
請問大家1個不知道算不算簡單還是複雜的問題
今天在TImage有一條直線(可能是曲線)
問題來了...
大家都知道Image1->Canvas->Pixels[x][y]
其中x,y預設均為整數
比如說好了:一條線段長100,要取13個等分的點
即0,100/13,200/13,...類推
總是找不到剛剛好100/13或是200/13之類的點
於是程式陷入無窮回圈,請問該如何解啊?
|
richtop
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:122 回覆:646 積分:468 註冊:2003-06-10
發送簡訊給我
|
plihui 您好: 這問題仔細看來還蠻有趣的。 ![]()
我個人的想法是這樣的:
假設以直線來說,您恐怕要先算出這條直線所有會經過的點(存成陣列),接下來有兩種方法算出可能的等分點(由於取整數值的關係,只能盡量接近),
>
|
plihui
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:88 回覆:96 積分:41 註冊:2003-07-03
發送簡訊給我
|
引言:
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
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:88 回覆:96 積分:41 註冊:2003-07-03
發送簡訊給我
|
引言:
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
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:122 回覆:646 積分:468 註冊:2003-06-10
發送簡訊給我
|
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 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|