導航:首頁 > 源碼編譯 > cround演算法

cround演算法

發布時間:2023-08-05 21:54:15

Ⅰ R-CNN 系列 object detection 演算法

在 object detection 領域,近 5 年的突破性進展似乎都與一個名字有關系:Ross Girshick。梳理從 R-CNN,Fast R-CNN, Faster R-CNN 到 Mask R-CNN 等各種經典模型,Ross Girshick 都是作者之一,甚至連 YOLO 的作者中也出現了 Ross Girshick 的名字。

這位大神簡歷如下:

從演算法到實現框架再到數據集,這位大神實現了一條龍的突破~

本文的目的是整理總結 R-CNN 系列演算法的發展歷程和模型本身的核心思想,不涉及太多技術細節(例如訓練數據預處理,超參數設置等)。
參考文獻主要是上述各演算法的原文以及下列資源:

R-CNN,一般認為全稱是 Region-based CNN 或者作者原文中提到的 Regions with CNN features。

概括地說,R-CNN 的步驟如下圖所示:

下面詳細介紹 R-CNN 中的關鍵環節。

對於輸入的圖片,首先利用 selective search 演算法 生成約 2000 個 region。關於 selective search 演算法可以參考 原文 ,也可以參考 我們之前的博客文章 。原文中提到 R-CNN 對各種 region proposal 演算法沒有偏好,之所以選擇 selective search 演算法僅僅是為了方便與前人工作做對比。

這一部分的目的是對於每一個 region,通過 CNN (原文選用 AlexNet) 進行特徵提取,得到統一長度的 feature vector,以便後續的分類。

由於每個 region 的大小差別比較大,而 AlexNet 默認接收 227×227 pixel 的圖片,這里就需要對 region 做一些預處理,主要是 region 大小的轉化。

要把一個任意大小的圖片轉化成 227×227 像素的圖片方法有很多,原文中介紹了 4 種方式:

分別是:

最終作者選擇了 warp + padding 的方式,一方面 warp 相對來說是最簡單的,直接把任意大小的圖片縮放成 227×227 即可,另外 padding 是在原 region 周圍稍微添加了一些像素點,從實際效果看提高了檢測正確率。

將統一大小的 region 送入 CNN 中,進行特徵提取。 如何得到這個 CNN 也是一個問題。

針對目標檢測的數據集 ILSVRC detection dataset 包含了 200 類物體,PASCAL VOC (Visual Object Classes) 包含了 20 類物體。相對來說帶有標簽的訓練數據比較少,不足以訓練一個大型的 CNN,因此採用了 transfer learning 的技術。原文中並沒有提到 transfer learning 這個名詞,只是說 fine-tuning
首先借用在 ImageNet 上已經訓練好的 CNN 模型(最初的文章中用了 AlexNet,後來 arXiv 上新版文章中用了 VGG,效果提升很明顯),然後在 PASCAL 數據集上進行 fine-tuning。這里對 AlexNet 網路結構的改變只是將原本對應 ImageNet 1000 類輸出的 classification layer 替換成了對應 N+1 類輸出的 classification layer,該層權重隨機初始化。對於 PASCAL 數據集 N=20,ILSVRC 數據集 N=200,另外 +1 對應 background 類型。

經過 fine-tuning 之後,CNN softmax layer 之前的 4096 維向量即為該 region 的 feature vector.

得到 region 的 feature vector 之後,送入 SVM 進行最後的分類。

這里 SVM 的訓練是針對不同類型的物體分開進行的,每一類訓練一個 SVM,它只給出針對這一類物體的分類結果。之所以最後用 SVM 分類,而不是直接用 CNN 的 softmax 進行分類,原文作者的解釋是嘗試過 softmax 之後發現效果比 SVM 差一些,但是同時指出如果調整一些訓練策略,softmax 和 SVM 之間的差距有可能縮小。這也為後來基於 R-CNN 的改進埋下了伏筆。

得到所有 region 對應的檢測結果(即包含某種類型物體的概率 score)之後,還有一步操作: Non-Maximum Suppression (NMS) 。如果兩個 region 檢測到同一類物體,比如都檢測到了行人,一個 region score 較高,而另一個 score 較低,當這兩個 region 的 IoU (intersection-over-union) 超過某個閾值時,即它們重合較多時,只保留那個 score 較高的 region.

object detection 的任務除了檢測圖中的物體,還要給出定位,即用 bounding box 盡量准確的圈出該物體。前邊基於 region 的分類過程可能能夠正確辨識出 region 中的物體,但是初始的 region 並不一定是一個合適的 bbox。在 R-CNN 最後又添加了一個線性回歸模型,基於 feature vector 來預測正確的 bbox 相對於 region 的位置變換,即預測 bbox 應該如何調整。這個訓練過程也是 class-specific 的。

在最終使用時,R-CNN 輸出包含兩部分:

理論上來說,更新 bbox 的位置之後,應該在新的 bbox 中重新進行分類,這樣准確度可能更高一些,但是原文作者發現實際上並沒有明顯改進。因此,實際使用中並沒有對新的 bbox 重新分類。

總的來說,上述 R-CNN 的訓練是分多步走的:先是 fine-tuning 一個 CNN 得到 feature vector,然後訓練 SVM 進行分類,最後還要再訓練一個線性回歸環節預測 bounding box 的調整。

Fast R-CNN 的改進是不再使用獨立的 SVM 和線性回歸,而是統一用 CNN 將這三個環節整合起來。Fast R-CNN 在訓練時間和檢測時間方面比當時已有的其他演算法快若干數量級。

Fast R-CNN 整體框架如下:

基本步驟:

在上述各環節中,我認為比較關鍵的有兩個:一是 RoI projection,即將 image 上的 RoI 映射到 feature map 上的 RoI。二是通過 RoI pooling layer 將 feature map 上不同大小的 RoI 轉化成統一大小的 sub feature map。而這兩個環節都借鑒了 SPPnets ,其中 RoI pooling layer 是 SPPnets 中 Spatial Pyramid Pooling layer 的特例。

原本 R-CNN 是在原圖上選取若干RoI,然後經過 CNN 處理,最後提取出 feature vector。對於每個圖片上不同的 RoI 來說,從輸入到輸出沒有任何共享的東西。

RoI projection 的作用是將 R-CNN 中對 image RoI 的處理推遲到了 feature map 上,這樣可以讓一個 image 的所有 RoI 共享從 image 到 feature map 的卷積處理過程。這很顯然會加速訓練和測試過程。至於如何將 image RoI 映射到 feature map RoI,已經有了 非常細致的討論 ,這里不再贅述。

如何將 feature map 上不同大小的 RoI 轉化成統一大小的 sub feature map? 這里 有非常直觀的動畫演示。

概括如下:
假設我們已經得到下面的 feature map (只考慮 2D)

其中 RoI 為黑框部分,大小為 。

我們希望將 RoI 轉化成 2×2 大小,可以選擇一個 2×2 的窗口如下

對每一個格子進行 max pooling 操作,得到如下的 2×2 的 feature map

總的來說,如果 RoI 大小為 ,希望得到的 feature map 大小為 ,則窗口中格子數目為 。可以根據具體情況向上或向下取整。

結合實際應用,如果 CNN 網路選用 VGG16,結構如下:

將最後一個 max pooling layer 替換為 RoI pooling layer。前部的卷積層對輸入圖片的大小沒有嚴格限制,這一限制主要是在 fully connected layer,所以為了配合 VGG16 網路結構,要確保每個 RoI 輸出的 feature map 依然為 。

對於 VGG16 網路結構的修改還包括:

在 Fast R-CNN 中,region proposal 是由 CNN 網路之外的演算法提供的,例如 selective search。相對於後續的 region recognition 過程,region proposal 這一步實際上是整個演算法的速度瓶頸。

Faster R-CNN 之所以 "Faster",就是因為提出了 Region Proposal Network (RPN) ,加速了 region proposal 過程。Faster R-CNN 本質上就是 RPN + Fast R-CNN.

整個 Faster R-CNN 結構如下:

或者更加詳細的結構如下:

RPN 和 Fast R-CNN 共享從 image 到最後一層 CNN 輸出的 feature map 這一段網路結構。 有些文章 也將 Faster R-CNN 看做三個模塊:用於生成 feature map 的 Feature network,用於生成 region proposal 的 RPN,以及用於最終的 object detection 的 Detection network。我們這里還是採用 RPN + Fast R-CNN 的形式。

RPN 的輸入是原始 image,輸出是 region proposals。在具體實現中,RPN 是 fully convolutional network (FCN),只包含 convolutional layer,原本在分類/回歸中常用的全連通層也由卷積操作替代。

有了 region proposals,後邊的操作與 Fast R-CNN 是相同的。

原文中採用 alternating training 的方式:

Ⅱ 經典目標檢測演算法介紹

姓名:牛曉銀;學號:20181213993;學院:計算機科學與技術

轉自:https://zhuanlan.hu.com/p/34142321

【嵌牛導讀】:目標檢測,也叫目標提取,是一種基於目標幾何和統計特徵的圖像分割。隨著計算機技術的發展和計算機視覺原理的廣泛應用,利用計算機圖像處理技術對目標進行實時跟蹤研究越來越熱門,對目標進行動態實時跟蹤定位在智能化交通系統、軍事目標檢測及醫學導航手術中手術器械定位等方面具有廣泛的應用價值。

【嵌牛鼻子】:目標檢測、檢測模型、計算機視覺

【嵌牛提問】:你知道或者用過哪些目標檢測演算法?

【嵌牛正文】:

(一)目標檢測經典工作回顧

本文結構

兩階段模型因其對圖片的兩階段處理得名,也稱為基於區域(Region-based)的方法,我們選取R-CNN系列工作作為這一類型的代表。

R-CNN: R-CNN系列的開山之作

論文鏈接:  Rich feature hierarchies for accurate object detection and semantic segmentation

本文的兩大貢獻:1)CNN可用於基於區域的定位和分割物體;2)監督訓練樣本數緊缺時,在額外的數據上預訓練的模型經過fine-tuning可以取得很好的效果。第一個貢獻影響了之後幾乎所有2-stage方法,而第二個貢獻中用分類任務(Imagenet)中訓練好的模型作為基網路,在檢測問題上fine-tuning的做法也在之後的工作中一直沿用。

傳統的計算機視覺方法常用精心設計的手工特徵(如SIFT, HOG)描述圖像,而深度學習的方法則倡導習得特徵,從圖像分類任務的經驗來看,CNN網路自動習得的特徵取得的效果已經超出了手工設計的特徵。本篇在局部區域應用卷積網路,以發揮卷積網路學習高質量特徵的能力。

R-CNN將檢測抽象為兩個過程,一是基於圖片提出若干可能包含物體的區域(即圖片的局部裁剪,被稱為Region Proposal),文中使用的是Selective Search演算法;二是在提出的這些區域上運行當時表現最好的分類網路(AlexNet),得到每個區域內物體的類別。

另外,文章中的兩個做法值得注意。

一是數據的准備。輸入CNN前,我們需要根據Ground Truth對提出的Region Proposal進行標記,這里使用的指標是IoU(Intersection over Union,交並比)。IoU計算了兩個區域之交的面積跟它們之並的比,描述了兩個區域的重合程度。

文章中特別提到,IoU閾值的選擇對結果影響顯著,這里要談兩個threshold,一個用來識別正樣本(如跟ground truth的IoU大於0.5),另一個用來標記負樣本(即背景類,如IoU小於0.1),而介於兩者之間的則為難例(Hard Negatives),若標為正類,則包含了過多的背景信息,反之又包含了要檢測物體的特徵,因而這些Proposal便被忽略掉。

另一點是位置坐標的回歸(Bounding-Box Regression),這一過程是Region Proposal向Ground Truth調整,實現時加入了log/exp變換來使損失保持在合理的量級上,可以看做一種標准化(Normalization)操作。

小結

R-CNN的想法直接明了,即將檢測任務轉化為區域上的分類任務,是深度學習方法在檢測任務上的試水。模型本身存在的問題也很多,如需要訓練三個不同的模型(proposal, classification, regression)、重復計算過多導致的性能問題等。盡管如此,這篇論文的很多做法仍然廣泛地影響著檢測任務上的深度模型革命,後續的很多工作也都是針對改進這一工作而展開,此篇可以稱得上"The First Paper"。

Fast R-CNN: 共享卷積運算

論文鏈接: Fast R-CNN

文章指出R-CNN耗時的原因是CNN是在每一個Proposal上單獨進行的,沒有共享計算,便提出將基礎網路在圖片整體上運行完畢後,再傳入R-CNN子網路,共享了大部分計算,故有Fast之名。

上圖是Fast R-CNN的架構。圖片經過feature extractor得到feature map, 同時在原圖上運行Selective Search演算法並將RoI(Region of Interset,實為坐標組,可與Region Proposal混用)映射到到feature map上,再對每個RoI進行RoI Pooling操作便得到等長的feature vector,將這些得到的feature vector進行正負樣本的整理(保持一定的正負樣本比例),分batch傳入並行的R-CNN子網路,同時進行分類和回歸,並將兩者的損失統一起來。

RoI Pooling 是對輸入R-CNN子網路的數據進行准備的關鍵操作。我們得到的區域常常有不同的大小,在映射到feature map上之後,會得到不同大小的特徵張量。RoI Pooling先將RoI等分成目標個數的網格,再在每個網格上進行max pooling,就得到等長的RoI feature vector。

文章最後的討論也有一定的借鑒意義:

multi-loss traing相比單獨訓練classification確有提升

multi-scale相比single-scale精度略有提升,但帶來的時間開銷更大。一定程度上說明CNN結構可以內在地學習尺度不變性

在更多的數據(VOC)上訓練後,精度是有進一步提升的

Softmax分類器比"one vs rest"型的SVM表現略好,引入了類間的競爭

更多的Proposal並不一定帶來精度的提升

小結

Fast R-CNN的這一結構正是檢測任務主流2-stage方法所採用的元結構的雛形。文章將Proposal, Feature Extractor, Object Classification&Localization統一在一個整體的結構中,並通過共享卷積計算提高特徵利用效率,是最有貢獻的地方。

Faster R-CNN: 兩階段模型的深度化

論文鏈接: Faster R-CNN: Towards Real Time Object Detection with Region Proposal Networks

Faster R-CNN是2-stage方法的奠基性工作,提出的RPN網路取代Selective Search演算法使得檢測任務可以由神經網路端到端地完成。粗略的講,Faster R-CNN = RPN + Fast R-CNN,跟RCNN共享卷積計算的特性使得RPN引入的計算量很小,使得Faster R-CNN可以在單個GPU上以5fps的速度運行,而在精度方面達到SOTA(State of the Art,當前最佳)。

本文的主要貢獻是提出Regional Proposal Networks,替代之前的SS演算法。RPN網路將Proposal這一任務建模為二分類(是否為物體)的問題。

第一步是在一個滑動窗口上生成不同大小和長寬比例的anchor box(如上圖右邊部分),取定IoU的閾值,按Ground Truth標定這些anchor box的正負。於是,傳入RPN網路的樣本數據被整理為anchor box(坐標)和每個anchor box是否有物體(二分類標簽)。RPN網路將每個樣本映射為一個概率值和四個坐標值,概率值反應這個anchor box有物體的概率,四個坐標值用於回歸定義物體的位置。最後將二分類和坐標回歸的損失統一起來,作為RPN網路的目標訓練。

由RPN得到Region Proposal在根據概率值篩選後經過類似的標記過程,被傳入R-CNN子網路,進行多分類和坐標回歸,同樣用多任務損失將二者的損失聯合。

小結

Faster R-CNN的成功之處在於用RPN網路完成了檢測任務的"深度化"。使用滑動窗口生成anchor box的思想也在後來的工作中越來越多地被採用(YOLO v2等)。這項工作奠定了"RPN+RCNN"的兩階段方法元結構,影響了大部分後續工作。

單階段(1-stage)檢測模型

單階段模型沒有中間的區域檢出過程,直接從圖片獲得預測結果,也被成為Region-free方法。

YOLO

論文鏈接: You Only Look Once: Unified, Real-Time Object Detection

YOLO是單階段方法的開山之作。它將檢測任務表述成一個統一的、端到端的回歸問題,並且以只處理一次圖片同時得到位置和分類而得名。

YOLO的主要優點:

快。

全局處理使得背景錯誤相對少,相比基於局部(區域)的方法, 如Fast RCNN。

泛化性能好,在藝術作品上做檢測時,YOLO表現比Fast R-CNN好。

YOLO的工作流程如下:

1.准備數據:將圖片縮放,劃分為等分的網格,每個網格按跟Ground Truth的IoU分配到所要預測的樣本。

2.卷積網路:由GoogLeNet更改而來,每個網格對每個類別預測一個條件概率值,並在網格基礎上生成B個box,每個box預測五個回歸值,四個表徵位置,第五個表徵這個box含有物體(注意不是某一類物體)的概率和位置的准確程度(由IoU表示)。測試時,分數如下計算:

等式左邊第一項由網格預測,後兩項由每個box預測,以條件概率的方式得到每個box含有不同類別物體的分數。 因而,卷積網路共輸出的預測值個數為S×S×(B×5+C),其中S為網格數,B為每個網格生成box個數,C為類別數。

3.後處理:使用NMS(Non-Maximum Suppression,非極大抑制)過濾得到最後的預測框

損失函數的設計

損失函數被分為三部分:坐標誤差、物體誤差、類別誤差。為了平衡類別不均衡和大小物體等帶來的影響,損失函數中添加了權重並將長寬取根號。

小結

YOLO提出了單階段的新思路,相比兩階段方法,其速度優勢明顯,實時的特性令人印象深刻。但YOLO本身也存在一些問題,如劃分網格較為粗糙,每個網格生成的box個數等限制了對小尺度物體和相近物體的檢測。

SSD: Single Shot Multibox Detector

論文鏈接: SSD: Single Shot Multibox Detector

SSD相比YOLO有以下突出的特點:

多尺度的feature map:基於VGG的不同卷積段,輸出feature map到回歸器中。這一點試圖提升小物體的檢測精度。

更多的anchor box,每個網格點生成不同大小和長寬比例的box,並將類別預測概率基於box預測(YOLO是在網格上),得到的輸出值個數為(C+4)×k×m×n,其中C為類別數,k為box個數,m×n為feature map的大小。

小結

SSD是單階段模型早期的集大成者,達到跟接近兩階段模型精度的同時,擁有比兩階段模型快一個數量級的速度。後續的單階段模型工作大多基於SSD改進展開。

檢測模型基本特點

最後,我們對檢測模型的基本特徵做一個簡單的歸納。

檢測模型整體上由基礎網路(Backbone Network)和檢測頭部(Detection Head)構成。前者作為特徵提取器,給出圖像不同大小、不同抽象層次的表示;後者則依據這些表示和監督信息學習類別和位置關聯。檢測頭部負責的類別預測和位置回歸兩個任務常常是並行進行的,構成多任務的損失進行聯合訓練。

相比單階段,兩階段檢測模型通常含有一個串列的頭部結構,即完成前背景分類和回歸後,把中間結果作為RCNN頭部的輸入再進行一次多分類和位置回歸。這種設計帶來了一些優點:

對檢測任務的解構,先進行前背景的分類,再進行物體的分類,這種解構使得監督信息在不同階段對網路參數的學習進行指導

RPN網路為RCNN網路提供良好的先驗,並有機會整理樣本的比例,減輕RCNN網路的學習負擔

這種設計的缺點也很明顯:中間結果常常帶來空間開銷,而串列的方式也使得推斷速度無法跟單階段相比;級聯的位置回歸則會導致RCNN部分的重復計算(如兩個RoI有重疊)。

另一方面,單階段模型只有一次類別預測和位置回歸,卷積運算的共享程度更高,擁有更快的速度和更小的內存佔用。讀者將會在接下來的文章中看到,兩種類型的模型也在互相吸收彼此的優點,這也使得兩者的界限更為模糊。

Ⅲ 計算機圖形學, 光線跟蹤演算法的過程是什麼

光線跟蹤思路:從視點出發,通過圖像平面上每個像素中心向場景發出一條光線,光線的起點為視點,方向為像素中心和視點連線單位向量。光線與離視點最近的場景物體表面交點有三種可能:
當前交點所在的物體表面為理想漫射面,跟蹤結束。
當前交點所在的物體表面為理想鏡面,光線沿其鏡面發射方向繼續跟蹤。
當前交點所在的物體表面為規則透射面,光線沿其規則透射方向繼續跟蹤。

偽代碼:

void TraceRay(const Vec3& start, const Vec3& direction, int depth, Color& color)
{
Vec3 intersectionPoint, reflectedDirection, transmittedDirection;
Color localColor, reflectedColor, transmittedColor;
if (depth >= MAX_DEPTH) {
color = Black; //#000
}
else {
Ray ray(start, direction); //取start起點,方向direction為跟蹤射線;
if ( !scene->HasIntersection(ray) )
color = BackgroundColor;
else {
計算理起始點start最近的交點intersectionPoint,
記錄相交物體intersectionObject,

// #1
Shade(intersectionObject, intersectionPoint, localColor);

// #2
if ( intersectionPoint所在面為鏡面 ) {
計算跟蹤光想S在intersectionPoint處的反射光線方向reflectedDirection,
TraceRay(intersectionPoint, reflectedDirection, depth+1, reflectedColor);
}
// #3
if ( intersectionPoint所在的表面為透明面 ) {
計算跟蹤光線S在intersectionPoint處的規則透射光線方向transmittedDirection,
TraceRay(intersectionPoint, transmittedDirection, depth+1, transmittedColor);
}
// #summarize
color = localColor + Ks * reflectedColor + Kt * transmittedColor;
}// else
} //else
}
// 局部光照模型計算交點intersectionPoint處的局部光亮度localColor
void Shade(const Object& intersectionObj, const Vec3& intersectionPoint, Color& localColor)
{
確定intersectionObj在intersectionPoint處的單位法向量N,
漫反射系數Kd,
鏡面反射系數Ks,
環境反射系數Ka;
localColor = Ka * Ia; //Ia為環境光亮度
for ( 每一個點光源PointLight ) {
計算入射光線單位向量L和虛擬鏡面法向單位向量H,
// 由Phong模型計算光源PointLight在intersectionPoint處的漫反射和鏡面反射光亮度
localColor += ( Ipointlight * ( Kd * (N.dot(L)) + Ks * (N.dot(H))^n ) );
}
}

java 橢圓演算法

以下代碼,將輸出一個橢圓,再有問題,我可遠程助你。如下:

/**
*(300,100)(400,100)
*
*/
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
publicclassLipse
{
publicstaticvoidmain(String[]args)
{
newMainFrame();
}
}

{
JPanelpane=newJPanel();
JTextFieldT_a,T_b;
JButtonDraw,Show;
JLabelL_a,L_b;
inta,b;
MainFrame()
{
super("DrawLipseWindow");
Containercon=this.getContentPane();
con.setLayout(null);

pane.setBounds(20,20,850,550);
pane.setBackground(newColor(100,156,200));
con.add(pane);

L_a=newJLabel("請輸入長半徑:a");
L_a.setBounds(180,580,100,20);
con.add(L_a);

L_b=newJLabel("請輸入短半徑:b");
L_b.setBounds(180,630,100,20);
con.add(L_b);


T_a=newJTextField();
T_a.setBounds(300,580,50,20);
con.add(T_a);

T_b=newJTextField();
T_b.setBounds(300,630,50,20);
con.add(T_b);

Draw=newJButton("畫橢圓");
Draw.setBounds(550,580,90,30);
Draw.addActionListener(this);
con.add(Draw);

Show=newJButton("顯示坐標");
Show.setBounds(550,620,90,30);
Show.addActionListener(this);
con.add(Show);

this.addWindowListener(newCloseWindow());
this.setBounds(20,20,900,700);
this.setVisible(true);
this.setResizable(false);

}/*MainFrame()*/
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==Draw)
{
a=Integer.parseInt(T_a.getText().trim());
b=Integer.parseInt(T_b.getText().trim());
Lineline=newLine(this);
line.drawLipse(a,b);
}
if(e.getSource()==Show)
{
Graphicsg1=this.pane.getGraphics();
g1.setColor(Color.PINK);
g1.drawLine(0,300,920,300);//----x---
g1.drawLine(410,0,410,720);//----y---
g1.dispose();
}

}/*methodactionPerformed*/
}
classLine
{
MainFramejb;
Line(MainFramejb)
{
this.jb=jb;
}
publicvoiddrawLipse(inta,intb)
{
intx,y;
doubled1,d2;
x=0;y=b;
d1=b*b+a*a*(-b+0.25);
Graphicsg=jb.pane.getGraphics();
g.setColor(Color.red);
g.drawLine(x+410,y+300,x+410,y+300);
g.drawLine(-x+410,-y+300,-x+410,-y+300);
g.drawLine(-x+410,y+300,x+410,-y+300);
g.drawLine(x+410,-y+300,x+410,-y+300);
try
{
while(b*b*(x+1)<a*a*(y-0.5))
{
if(d1<=0)
{
d1+=b*b*(2*x+3);
x++;
}
else
{
d1+=(b*b*(2*x+3)+a*a*(-2*y+2));
x++;
y--;
}
g.drawLine(x+410,y+300,x+410,y+300);
g.drawLine(-x+410,-y+300,-x+410,-y+300);
g.drawLine(-x+410,y+300,x+410,-y+300);
g.drawLine(x+410,-y+300,x+410,-y+300);
Thread.sleep(30);
}//topofwhile
}catch(Exceptione){}

d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
try
{
while(y>0)
{
if(d2<=0)
{
d2+=b*b*(2*x+2)+a*a*(-2*y+3);
x++;
y--;
}
else
{
d2+=a*a*(-2*y+3);
y--;
}
g.drawLine(x+410,y+300,x+410,y+300);
g.drawLine(-x+410,-y+300,-x+410,-y+300);
g.drawLine(-x+410,y+300,x+410,-y+300);
g.drawLine(x+410,-y+300,x+410,-y+300);
Thread.sleep(30);
}/*bottomofwhile*/

}catch(Exceptione){}

}/*DrawLipse*/

}

{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
}
閱讀全文

與cround演算法相關的資料

熱點內容
此電腦用戶文件夾怎麼改名 瀏覽:748
網上小額貸款app哪個好 瀏覽:802
蘋果游戲安卓玩的app是哪個 瀏覽:487
單片機kill軟體 瀏覽:397
類似解壓類的游戲視頻 瀏覽:926
在我的世界中如何加入伺服器地圖 瀏覽:207
linux常用命令解釋 瀏覽:561
五菱宏光的APP是哪個 瀏覽:609
java求最大值和最小值 瀏覽:223
騰訊學生雲伺服器空間多大 瀏覽:764
Qt源碼的編譯和安裝 瀏覽:125
蘋果怎麼創建命令 瀏覽:831
窗戶不漏風還能加密封條嗎 瀏覽:766
單片機通訊不穩定是什麼原因 瀏覽:254
安卓手機充不進電怎麼辦 瀏覽:877
word的圖片轉pdf高質量圖片 瀏覽:156
可編程滑鼠玩LOL 瀏覽:731
解壓球對孩子發育 瀏覽:947
安卓上的代碼編譯器 瀏覽:278
php導購網站源碼 瀏覽:304