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

如何求得某個角度的線上所有像素點

尚未結案
kamico
一般會員


發表:2
回覆:2
積分:0
註冊:2004-12-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-14 23:17:31 IP:220.130.xxx.xxx 未訂閱
如上圖 假設圓心點為O,且已知OA和Y軸的夾角為三十度 想請問如何求出線段OA上的所有像素點
richtop
資深會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-15 01:01:39 IP:211.76.xxx.xxx 未訂閱
kamico 您好:    這個問題的求解原理:其實就是把畫直線演算法中間算出的座標存起來,就是您要的答案。    您所畫的圖,X-Y方向似乎與一般不同,所以相關的座標修改,請您自行轉換。 getLine(.)程式傳回值為該線段的長度(點數),points則是存上述所有點的座標值,由於是以動態配置記憶體方式產生,所以呼叫使用後,記得釋放所配置的記憶體。    一個修改自下列連結的程式片段,請參考修改: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=53803

int getLine(int * &points, int xstart, int ystart, int xend, int yend)
{ int i;
  int x, y, dx, dy, e, size;
  int signx, signy, change, temp;      // get each pixel's coordinates on the line (xstart, ystart)-(xend, yend)
  signx=signy=1;
  if ( xend=0 )
         { if ( change==0 ) y =signy;
           else x =signx;
           e-=2*dx;
         }
       if ( change==0 ) x =signx;
       else y =signy;
       e =2*dy;
     }
  return ( size ); // the length of the desired line.
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString msg;
  int *points = NULL, len, radius=80;
  int xstart=0, ystart=0, xend, yend;
  float angle=180-30, deg2rad = 3.141592653/180.;      angle *= deg2rad;
  xend = (int) (radius * cos(angle));
  yend = (int) (radius * sin(angle));
ShowMessage(xend);
  len = getLine(points, xstart, ystart, xend, yend);      // show the coordinates of the line
  msg.printf("The length of the line is %d.\n", len);
  for (int k=0; kCanvas->Pixels[ x0 points[index] ][ y0-points[index 1] ] = RGB(255,0,0);
       index  = 2;
     }      delete [] points; // release the allocated memory.
}
//---------------------------------------------------------------------------
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
kamico
一般會員


發表:2
回覆:2
積分:0
註冊:2004-12-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-15 01:45:22 IP:220.130.xxx.xxx 未訂閱
richtop大哥您好: 抱歉,我一時心急沒注意到那麼大的錯誤 謝謝您的回應,馬上回去試!< >< >
kamico
一般會員


發表:2
回覆:2
積分:0
註冊:2004-12-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-15 23:48:07 IP:220.130.xxx.xxx 未訂閱
richtop大哥您好: 程式碼我試過了,的確可行,執行的結果會出現兩個訊息視窗 想請問您第一個出現的意思代表什麼呢? 第二個訊息視窗所顯示的是線上的所有座標點嗎? 您的做法跟程式我還看不太懂,現在還在努力了解中 那如果說將夾角換成任意角度是否都可行呢? (ex:31度、32度...) 謝謝您的幫忙
richtop
資深會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-16 02:47:01 IP:211.76.xxx.xxx 未訂閱
引言: richtop大哥您好: 程式碼我試過了,的確可行,執行的結果會出現兩個訊息視窗 想請問您第一個出現的意思代表什麼呢? 當時測試時看資料用的,可以略去。 第二個訊息視窗所顯示的是線上的所有座標點嗎? 您的做法跟程式我還看不太懂,現在還在努力了解中 那如果說將夾角換成任意角度是否都可行呢? (ex:31度、32度...) 是所有的座標點。 理論上我是用數學平面座標去算的,因為螢幕上的y座標會差一個負號,但我在畫圖時已修正過來了。所以您只要以x軸為零度,逆時針為正即可算出確的座標點來。或者您可自行測試幾個特殊角度看看。 謝謝您的幫忙
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2004/12/16 02:49:11
系統時間:2024-05-20 23:27:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!