绘图算法
⑴ 什么是力导向布局图
力导向图(Force-Directed Graph),是绘图的一种算法。在二维或三维空间里配置节点,节点之间用线连接,称为连线。各连线的长度几乎相等,且尽可能不相交。节点和连线都被施加了力的作用,力是根据节点和连线的相对位置计算的。根据力的作用,来计算节点和连线的运动轨迹,并不断降低它们的能量,最终达到一种能量很低的安定状态。
力导向图能表示节点之间的多对多的关系
⑵ 目前在绘画领域的三种代表性算法
您好,茫茫人海之中,能为君排忧解难实属朕的荣幸,在下拙见,若有错误,还望见谅!。展开全部
现代
特征一:绘画的表现形式从具象转变为抽象或意象
特征二:由再现客观世界转变为表现主观世界
古代
和谐性
象征性
灵动性
天趣性
特征一:绘画的表现形式从具象转变为抽象或意象
现代主义绘画与传统绘画相比有相当大的区别,以毕加索的《格尔尼卡》和德拉克洛瓦的《希奥岛的屠杀》为例。前者是现代主义绘画立体主义的代表作,后者是传统绘画浪漫主义的精典作品,两幅绘画同样都是表现战争题材,但是从作品的表现形式来看,却是大相径庭。《希奥岛的屠杀》运用了明暗造型的方法,真实地刻画了耀武扬威的侵略者和倒在血泊中绝望挣扎的孤立无助的受压迫者的残状,是具象的画面
特征二:由再现客观世界转变为表现主观世界
格尔尼卡》正是以象征性的手法、变形的形体和灰暗的色调,表现了战争的罪恶和灾难的悲剧。画面中牛头是法西斯残暴的象征,肢离破碎的人体是人民残遭迫害的残状,画面上方的灯泡一样的眼睛则是对法西斯暴行的揭露。那变形的形体相互交错、拼贴组成了一种混乱的视觉效果和残暴恐怖的气氛,而这正是战争在毕加索脑海中的一种主观反映,毕加索正是通过这些极度夸张、变形的图式,表达了他对德国法西斯暴行的强烈仇恨。由此可见,现代主义绘画的特征之二,就是从传统绘画的再现客观世界转变为表现主观世界。而这一点正与中国写意画的特点不谋而合,画家不再以画得与客观世界逼真肖似为目的,而是以被描绘的对象为媒介,表现自己的情感、观念、思想等主观世界,将客观对象按照主观意图进行变形或抽象化处理。非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!
⑶ java绘图算法
最节能就是把6个图片轮流画一次,不过你要把这六个图片弄成资源,然后就当作普通图来画,这是最简单的方法,如果你要全部自己弄,这6个图很难创建出来,你图里有渐变效果,这个渐变的值不知道是多少。我给一个画渐变园的类给你。如果要自己画可能有点用。
public class PaintTest {
public static void main(String[] args) {
JFrame frame = new PaintTestFrame();
frame.show();
}
}
class PaintTestFrame extends JFrame implements ActionListener {
public PaintTestFrame() {
setTitle("PaintTest");
setSize(400, 400);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container contentPane = getContentPane();
canvas = new PaintPanel();
contentPane.add(canvas, "Center");
JPanel buttonPanel = new JPanel();
ButtonGroup group = new ButtonGroup();
colorButton = new JRadioButton("Color", true);
buttonPanel.add(colorButton);
group.add(colorButton);
colorButton.addActionListener(this);
gradientPaintButton = new JRadioButton("Gradient Paint", false);
buttonPanel.add(gradientPaintButton);
group.add(gradientPaintButton);
gradientPaintButton.addActionListener(this);
texturePaintButton = new JRadioButton("Texture Paint", false);
buttonPanel.add(texturePaintButton);
group.add(texturePaintButton);
texturePaintButton.addActionListener(this);
contentPane.add(buttonPanel, "North");
}
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if (source == colorButton) {
canvas.setColor();
} else if (source == gradientPaintButton) {
canvas.setGradientPaint();
} else if (source == texturePaintButton) {
canvas.setTexturePaint();
}
}
private PaintPanel canvas;
private JRadioButton colorButton;
private JRadioButton gradientPaintButton;
private JRadioButton texturePaintButton;
}
class PaintPanel extends JPanel {
public PaintPanel() {
Image image = Toolkit.getDefaultToolkit().getImage("java2s.gif");
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(image, 0);
try {
tracker.waitForID(0);
} catch (InterruptedException e) {
}
bufferedImage = new BufferedImage(50, 50, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(image, 0, 0, null);
setColor();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(paint);
Ellipse2D circle = new Ellipse2D.Double(0, 0, getWidth(), getHeight());
g2.fill(circle);
}
public void setColor() {
paint = Color.red; // Color implements Paint
repaint();
}
public void setGradientPaint() {
paint = new GradientPaint(0, 0, Color.red, (float) getWidth(),
(float) getHeight(), Color.blue);
repaint();
}
public void setTexturePaint() {
Rectangle2D anchor = new Rectangle2D.Double(0, 0, 2 * bufferedImage.getWidth(), 2 * bufferedImage.getHeight());
paint = new TexturePaint(bufferedImage, anchor);
repaint();
}
private Paint paint;
private BufferedImage bufferedImage;
}