來玩玩畫直線

2022-03-15 23:36:54 字數 2481 閱讀 2588

哦啦啦,俺又來啦,幾個月不見是不是很想俺吶,挖哈哈 (¯▽¯;)。

俺這個文章純屬拋磚引玉 ,希望各位高手不要丟板磚啦。

俺們寫程式也就是乙個樂趣 比不了你們這些的牛x人啦

這次俺們來秀下直線方程 小意思 見笑啦,俺們用得最多的就是.net了哈 所以依舊在.net平台上做測試

好正題:

先把一次函式搬出來哈

直線的方程:y=ax+b

地球人都知道哈啊,如果是初中都沒上的同學請略過。。。

還有兩邊都是1的直角等邊三角形他的斜邊是多少?當然是根號2啦  哈哈哈

平常老在vc裡lineto()過去 lineto()過來,童鞋們難道就沒想過他是怎麼來的麼。

如果知道了兩個座標(x1,y1 )(x2,y2) ,也就是你的滑鼠在你的form1上在不同地方點兩下  於是就有了兩個point物件 明白了噻

關於直線方程 它有很多「式」哈, 比如像點斜式啊 海底撈月式啊 老樹盤根式啊 兩點式啊 三點式啊 啥的,

俺們這裡由於事先知道了兩個點(座標),所以當然是用兩點式啦:

(y-y1)/(y2-y1)=(x-x1)/(x2-x1)

y2 y1 x2 x1 俺都了解,熟麼 那個y是怎麼回事? 這個嘛⊙﹏⊙ 。。。

上頭那些最後發現行不通,所以基本都是廢話

俺們現在用到的解決方案:

既然知道了兩個座標(x跟y的值) 我們就仿照y=ax+b 連立個二元一次方程組

管他行不行得通先搞個山寨的再說,比如p1=(0,1) p2=(5,4)

代入方程

1=a*0+b

4=a*5+b

不要告訴我你不會解二元一次方程組哈

先把b=y1-a*x1代入2式

a=(y2-y1)/(x2-x1)

然後求b=y1-a*x1

這就好辦了噻,反正都是座標 x1肯定不等於x2噻 否則就是一條豎線了,

讓x1往x2的方向累加或者累減 然後不斷求出y的值  連續起來不就是一條直線了麼

挖哈哈終於ok了

別高興得過早⊙﹏⊙∥ ,

windows下的座標系是這樣的:

數學裡的平面直角座標系是這樣的:

//第一步

//由於windows座標跟數學座標系的不同 先把 windows座標 x y變成負數(假設他是數學座標裡的第三象限)

point t1=new point(0-p1.x,0-p1.y);

point t2=new point(0-p2.x,0-p2.y);

為什麼要這樣呢,我不解釋 。可能有朋友說只要把x變成負數不就行了嗎 真的行嗎 你試試吧。

為什麼要這樣呢,他究竟是為什麼呢 這是為什麼呢。座標系的第一到三象限我都沒有畫出來 可能容易讓大家迷糊。

且聽貧僧慢慢道來:

windows座標系下的x y全是正數,我們把它投射到直角座標系的第三象限(也就是x y 全是負數)。

然而第三象限投射過後的直線 跟第四象限裡的直線是相互對稱的 你沒發現嗎

總之上面的意思可以用下圖表示:

怎麼變回windows裡的第四象限? 好說,在最終結果全部取絕對值就ok啦:

//注意 從平面直角座標系到windows座標系的轉換

drawpoint(new point((int)math.abs(i), (int)math.abs(ty)));

最後發點小牢騷都知道bitmap有setpixel()函式 graphics下俺想找個畫點的函式愣是沒找著,也許小弟見識少真沒見過。

只有自己隨便整了個:

void drawpoint(point p1)//畫點 p1是windows座標

說實話**不多哈 就那麼幾十行,關鍵是理論。 是騾子是馬拉出來溜溜 獻醜了哈:

void drawpoint(point p1)//畫點 p1是windows座標

void drawline(point p1,point p2)//畫線的函式 p1 p2均為windows座標

}

呼叫:

//兩點 x=20 y=20  ,x=50 y=50

drawline(new point(20, 20), new point(50, 50));

呼叫結果

噹噹噹噹:

程式還有許多bug跟不足之處 多多見諒 別丟啥子西紅柿 臭雞蛋之類的過來哈  ̄□ ̄||

由於技術含量太低的大濕們向來對俺都是很不屑的哈 這次總算稍微有點技術含量了吧(¯▽¯;)。

畫直線演算法

畫直線演算法 前段時間做了一下光柵直線生成演算法的研究,並且在vc下實現了dda 演算法 bresenham 演算法 對稱演算法 兩步演算法 及四步演算法。這裡給個總結,希望和大家交流。主要研究的演算法主要有 dda演算法 bresenham 演算法 對稱演算法 兩步演算法 及四步演算法,此外還對自...

彙編畫直線

line macro x1,y1,x2,y2,color local exit local linezheng,linefun local linezhengzheng,linezhengfun local linefunzheng,linefunfun local line1,line2,line...

拋棄NVelocity,來玩玩Razor

只能放些靜態頁面上面,外加jsonp來實現互動,我們知道.net中有很多模板引擎,但都不是原裝的,所以基本都沒有 提示,用起來比較不爽,自razor出來後,私活中也拋棄了原先使用的nvelocity,而採用原裝的razor。好了,我們先看看怎麼玩,首先我們去codeplex上下兩個dll。我想raz...