java实现种子填充算法,Java编写图形学的种子填充算法
用C写的图形学填充算法已经很多了,看到不少帖子都是在问关于如何用Java编写图形学的填充算法,说来也巧,我刚好要做一个这个方面的实验,用的是扫描线种子填充算法,由于时间仓促,代码质量可能不算很高,希望大家见谅,并希望大家都来为我指点一下,小弟不胜感激~~
好了,废话就不说了,我们先一起来看一下相关的知识~
扫描线种子填充算法思想
首先填充种子所在的尚未填充的一区段,然后确定与这一区段相邻的上下两条扫描线上位于该区段内是否存在需要填充的新区段,如果存在,则依次把每个新区段最右端的象素作为种子放入堆栈。反复这个过程,直到堆栈为空。
扫描线种子填充算法步骤
1、初始化堆栈。
2、种子压入堆栈。
3、While(堆栈非空)从堆栈弹出种子象素。
{
(1)如果种子象素尚未填充,则:
① 求出种子区段:xleft、xright。
② 填充整个区段。
(2)检查相邻的上扫描线的xleft ≤ x ≤ xright区间内,是否存在需要填充的新区段,如果存在,则把每个新区段在xleft ≤ x ≤ xright范围内的最右边的象素,作为新的种子象素依次压入堆栈。
(3)检查相邻的下扫描线的xleft≤x≤xright区间内,是否存在需要填充的新区段,如果存在,则把每个新区段在xleft≤x≤xright范围内的最右边的象素,作为新的种子象素依次压入堆栈。
}
以上是一些相关的知识提要,接下来是一份算法的Java代码:
包括两个类:
package com.tony.view;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.util.Vector;
import javax.swing.JPanel;
public class DrawComponentPanel extends JPanel {
private int[] xPoints = new int[4];
private int[] yPoints = new int[4];
private Color fillColor;
private Color curColor;
private boolean fill = false;
public DrawComponentPanel() {
xPoints[0] = 0;
xPoints[1] = 0;
xPoints[2] = 0;
xPoints[3] = 0;
yPoints[0] = 0;
yPoints[1] = 0;
yPoints[2] = 0;
yPoints[3] = 0;
}
protected void paintComponent(final Graphics g) {
super.paintComponent(g);
Robot robot = null;
Point p;
try {
robot = new Robot();
} catch (
java实现种子填充算法,Java编写图形学的种子填充算法相关推荐
- 图形学初步--------种子填充算法
上篇博文讲到了填充算法的扫描线填充,这篇博文讲解另一大算法思路----------种子填充. 一.概念 种子填充算法假设在多边形或区域内部至少有一个像素是已知的.然后设法找到区域内所有其他像素,并对它 ...
- java代码隐藏面消除算法_计算机图形学—— 隐藏线和隐藏面的消除(消隐算法)...
一.概述 由于投影变换失去了深度信息,往往导致图形的二义性.要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面(或可见线判定.可见面判定),或简称为消隐.经过消隐得到 ...
- Leetcode算法Java全解答--37. 解数独
Leetcode算法Java全解答–37. 解数独 文章目录 Leetcode算法Java全解答--37. 解数独 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 编写一个 ...
- java random 伪随机_真/伪随机、以及随机算法
伪随机性(英语:Pseudorandomness)是一个过程似乎是随机的,但实际上并不是.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机. 什么是随机数 随机数在计算机应用中使用的比较广 ...
- java堆算法,Java 基本功04-JVM-Java堆详解和GC算法
JVM GC 机制 1. 在此之前需要了解相关概念: 1.1 Java 堆内存: 在 HotSpot JVM 实现中 Heap 内存被"分代"管理. JVM 的内存首先被分割成两部 ...
- 伪共享和缓存行填充,Java并发编程还能这么优化!
前言 关于伪共享的文章已经很多了,对于多线程编程来说,特别是多线程处理列表和数组的时候,要非常注意伪共享的问题.否则不仅无法发挥多线程的优势,还可能比单线程性能还差.随着JAVA版本的更新,再各个版本 ...
- 蚁群算法画图java_[转载]简单蚁群算法 + JAVA实现蚁群算法
一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...
- 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法
一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...
- 查找算法--Java实例/原理
原文网址:查找算法--Java实例/原理_IT利刃出鞘的博客-CSDN博客 简介 本文用Java实例介绍查找算法及其原理. 本内容也是Java后端面试常见的问题. 查找定义 查找定义:根据给定的某个值 ...
最新文章
- WIN10 右键 powershell 修改
- SEO优化如何“搭乘”线上营销推广“列车”?
- [Java]Object有哪些公用方法?
- 17个你必须牢记的Win7快捷键[转]
- Java并发包--阻塞队列(BlockingQueue)
- 长大了,烦恼就像是滔滔江水
- CGCS2000大地坐标系、北斗坐标系(BDCS)与WGS84坐标系的差异
- java gui变量_关于java:静态/类变量和GUI
- EXCEL利用VBA把汉字转拼音(李晓锋版)20180828更新
- 软件测试周刊(第25期):不要成天到晚地找意义
- 常见定位技术有哪些?
- 图表制作办公首选--实用图表工具Echars
- 手把手带你玩转需求预测-需求预测方法介绍
- 【微信小程序】文本域输入带最大字数限制(1/100)
- 安卓手机能用的Mac地址修改器和教程
- 卷积层里的填充和步幅
- C--一元二次方程求解
- 中国枭龙战机座舱设计远超最新F-16与台风同级
- 机房PDU如何挑选?
- 客户精准营销(RFM模型)