遍歷圓和直線上的點

2021-06-20 17:18:07 字數 1659 閱讀 8501

在影象處理中,經常會遇到已經圓的圓心和半徑,或直線的兩個端點座標,如何準確的進行取樣?

圓的取樣:利用中點畫圓演算法,但得到的點是無序的,對於某些需要有序點的情況並不適用

int x=0;

int y=r;

float d=1.25-r;

pointcontainer.push_back(cvpoint(xin.x+x,xin.y+y));

pointcontainer.push_back(cvpoint(xin.x-x,xin.y+y));

pointcontainer.push_back(cvpoint(xin.x-x,xin.y-y));

pointcontainer.push_back(cvpoint(xin.x+x,xin.y-y));

pointcontainer.push_back(cvpoint(xin.x+y,xin.y+x));

pointcontainer.push_back(cvpoint(xin.x-y,xin.y+x));

pointcontainer.push_back(cvpoint(xin.x+y,xin.y-x));

pointcontainer.push_back(cvpoint(xin.x-y,xin.y-x));

while(x<=y)

x++;

pointcontainer.push_back(cvpoint(xin.x+x,xin.y+y));

pointcontainer.push_back(cvpoint(xin.x-x,xin.y+y));

pointcontainer.push_back(cvpoint(xin.x-x,xin.y-y));

pointcontainer.push_back(cvpoint(xin.x+x,xin.y-y));

pointcontainer.push_back(cvpoint(xin.x+y,xin.y+x));

pointcontainer.push_back(cvpoint(xin.x-y,xin.y+x));

pointcontainer.push_back(cvpoint(xin.x+y,xin.y-x));

pointcontainer.push_back(cvpoint(xin.x-y,xin.y-x));

}

還有一種方法就是利用三角函式,個人覺得這樣得到的點不準確

對於直線上的點:

1.dda畫線演算法

cpoint p0,p1;

float xdis=p1.x-p0.x;

float ydis=p1.y-p0.y;

float maxstep=(fabs(xdis)>fabs(ydis)?fabs(xdis):fabs(ydis));

float xunitstep=1.0f;

float yunitstep=1.0f;

xunitstep=xdis/maxstep;

yunitstep=ydis/maxstep;

while(p0.x

2.中點畫線演算法

cpoint p0,p1;

float xdis=p1.x-p0.x;

float ydis=p1.y-p0.y;

float d=ydis/xdis-0.5;

while(p0.x

覆蓋最多的直線上的點

題庫建設。已知x1,x2,x3,xn是直線上的點,現希望用固定長度固定數量的木條去覆蓋這些點,請編寫程式求最多能夠覆蓋多少點?輸入要求 輸入的第1行為三個整數n,m,k,分別表示直線上點的個數,木條的長度以及數量。輸入的第2行有n個整數,表示座標上的點。輸出要求 輸出1行,為最多能夠覆蓋的點的個數。...

求直線上最近的二點 在公垂線上

直線是用乙個點和乙個方向向量 已單位化 構成 現在要求二條直線最近的點 即公垂線與兩直線的交點 class cray 射線類 如果二個直線平行,則兩條直線r1,r2的方向向量的內積必為1或 1,此時可計算s2在r1上的投影 點乘 在r1上計算投影點為sproject,則要求的兩點分別為sprojec...

使用Java求某點到直線上的投影點

求直線外一點到直線上的投影點 param pline 線上一點 param k 斜率 param pout 線外一點 param pproject 投影點 public static void getprojectivepoint pointf pline,double k,pointf pout,...