欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現(xiàn)直線分形山脈

 更新時間:2022年01月11日 07:17:26   作者:Benjamin.  
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)直線分形山脈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現(xiàn)直線分形山脈的具體代碼,供大家參考,具體內(nèi)容如下

直線分形

直線分形平面山脈

想要實現(xiàn)這個效果的思想就是,由x1、x2所確定的一條直線,我們?nèi)∷鼈兊闹悬cx3然后允許x3的y坐標(biāo)在一定范圍內(nèi)隨機(jī)波動,(這種情況下我們讓x1連接x3,x2連接x3就會看起來有小山的感覺了,但其實我們是在遞歸結(jié)束時才開始連線的)接下來做相同的動作,讓x1與x3的中點x4的y坐標(biāo)在一定范圍內(nèi)波動,x2與x3的中點x5的y坐標(biāo)在一定范圍內(nèi)隨機(jī)波動,就這樣遞歸下去,最后在我們完成設(shè)定的遞歸層數(shù)后就開始連線,并且填充它們之間所包含的區(qū)域,那么就實現(xiàn)了直線分形的平面山脈啦。(作為手殘黨的我畫圖是真的不好看,小伙伴們就將就著看看好了,T.T…)

效果圖

這是我這個代碼畫出的一個效果。

山脈

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Polygon;
import java.util.Random;

import javax.swing.JFrame;


public class LineString {
?? ?JFrame frame=new JFrame();

?? ?public static void main(String[] args) {
?? ??? ?LineString line=new LineString();
? ? ? ? line.showUI();
?? ?}
?? ?public void drawline(int x1,int y1,int x2,int y2,int n,Graphics g,int range,int height){
//參數(shù)解釋:x1,y1,x2,y2就是我們當(dāng)前兩個點的坐標(biāo),n是我設(shè)定的遞歸層數(shù)
//range就是允許中點坐標(biāo)波動的范圍,height是最后填充時會用到的?? ??? ?
? ?//在遞歸結(jié)束的時候,我們才開始畫山脈
? //填充的時候我們已經(jīng)知道了需要填充不規(guī)則四邊形的上面兩個點的坐標(biāo)
?//那么下面兩個點的橫坐標(biāo)我們就也可以對應(yīng)上面的兩個點
?//只需要將上面兩個點的y坐標(biāo)設(shè)為界面底部就OK
//所以我這里讓下面的兩個點加上height,當(dāng)然這個height也是跟著界面在改變
?? ? ? ?if(n<=0){
?? ? ? ??? ?int []x={x1,x2,x2,x1};
?? ? ? ??? ?int []y={y1,y2,y2+height,y1+height};
?? ? ? ??? ?Polygon polygon=new Polygon(x,y,4);
?? ? ? ??? ?g.setColor(Color.BLACK);
?? ? ? ??? ?g.fillPolygon(polygon);
?? ? ? ??? ?return ;
?? ? ? ?}
?? ? ? ?//求中點的坐標(biāo)
?? ? ? ?int x=(x2+x1)/2;?
?? ??? ?int y=(y2+y1)/2;
?? ??? ?//這里的range可能會為0,為了修復(fù)這個bug,我們要檢測它
?? ??? ? ? if(range==0){
? ? ? ? ?? ?range=1;
? ? ? ? }
? ? ? ? Random rand=new Random();
? ? ? ? int i=rand.nextInt(range*2)-range;
? ? ? ? //讓中點的y坐標(biāo)隨機(jī)波動
? ? ? ? y+=i;
? ? ? ? //減少遞歸層數(shù)
?? ??? ?n--;
?? ??? ?//每一次遞歸都減少range可以波動的范圍
?? ??? ?range *= 0.6;?? ?
?? ??? ?
?? ??? ?//將山脈分成左右兩邊
?? ??? ?//畫左邊
?? ? ? ?drawline(x1,y1,x,y,n,g,range,height);
?? ? ? ?//畫右邊
? ? ?? ?drawline(x,y,x2,y2,n,g,range,height);
?? ? ??
?? ?}
? ? public void showUI(){
? ? ?? ?Dimension dim=new Dimension(1000,1000);
? ? ?? ?frame.setTitle("Recursion");
? ? ?? ?frame.setSize(dim);
? ? ?? ?frame.setLocationRelativeTo(null);
? ? ?? ?frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
? ? ?? ?LineListener listener=new LineListener(frame);
? ? ?? ?frame.addMouseListener(listener);
? ? ?? ?frame.setVisible(true);
? ? ?? ?Graphics g=frame.getGraphics();
? ? ?? ?listener.g=g;
? ? ?? ?
? ? ?? ?listener.height=frame.getHeight();
? ? }
}

山脈界面監(jiān)聽器
 

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;

public class LineListener implements MouseListener{

?? ?int x1,x2,y1,y2;
? ? public Graphics g;
? ? int height;
? ? JFrame frame;
? ? public LineListener(JFrame frame) {
?? ??? ?// TODO Auto-generated constructor stub
? ? ?? ?this.frame=frame;
? ? ?? ?this.height=frame.getHeight();
? ? ?? ?
?? ?}
?? ?@Override
?? ?public void mousePressed(MouseEvent e) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?
?? ??? ?x1=e.getX();
?? ??? ?y1=e.getY();
?? ?}

?? ?@Override
?? ?public void mouseReleased(MouseEvent e) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?
?? ??? ?x2=e.getX();
?? ??? ?y2=e.getY();
?? ??? ?LineString string=new LineString();
?? ??? ?string.drawline(x1, y1, x2, y2, 9, g,300,height);
?? ?}

?? ?@Override
?? ?public void mouseClicked(MouseEvent e) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?
?? ?}

?? ?@Override
?? ?public void mouseEntered(MouseEvent e) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?
?? ?}

?? ?@Override
?? ?public void mouseExited(MouseEvent e) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?
?? ?}


}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java ThreadLocal 線程安全問題解決方案

    Java ThreadLocal 線程安全問題解決方案

    這篇文章主要介紹了Java ThreadLocal 線程安全問題解決方案的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Java流式操作之Collectors工具類操作指南

    Java流式操作之Collectors工具類操作指南

    Collectors是Collector的工具類,類中提供了很多流收集、歸約、分組、分區(qū)等方法,方便我們直接使用,下面這篇文章主要給大家介紹了關(guān)于Java流式操作之Collectors工具類操作的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • Java關(guān)鍵字之native詳解

    Java關(guān)鍵字之native詳解

    這篇文章主要為大家介紹了Java關(guān)鍵字之native,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java自定義異常簡單示例

    Java自定義異常簡單示例

    使用Java內(nèi)置的異常類可以描述在編程時出現(xiàn)的大部分異常情況,除此之外用戶還可以自定義異常,下面這篇文章主要給大家介紹了關(guān)于Java自定義異常的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Java?OpenCV圖像處理之自定義圖像濾波算子

    Java?OpenCV圖像處理之自定義圖像濾波算子

    這篇文章主要為大家介紹了如何利用Java?OpenCV實現(xiàn)自定義圖像濾波(降噪)?算子,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2022-02-02
  • Mybatis實現(xiàn)動態(tài)排序方式

    Mybatis實現(xiàn)動態(tài)排序方式

    這篇文章主要介紹了Mybatis實現(xiàn)動態(tài)排序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • java如何將Object數(shù)組轉(zhuǎn)換為指定類型數(shù)組

    java如何將Object數(shù)組轉(zhuǎn)換為指定類型數(shù)組

    這篇文章主要介紹了java如何將Object數(shù)組轉(zhuǎn)換為指定類型數(shù)組,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 使用Java實現(xiàn)百萬Excel數(shù)據(jù)導(dǎo)出

    使用Java實現(xiàn)百萬Excel數(shù)據(jù)導(dǎo)出

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實現(xiàn)百萬Excel數(shù)據(jù)導(dǎo)出,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-03-03
  • Spring AspectJ 實現(xiàn)AOP的方法你了解嗎

    Spring AspectJ 實現(xiàn)AOP的方法你了解嗎

    這篇文章主要為大家介紹了Spring AspectJ 實現(xiàn)AOP的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • java實現(xiàn)微信支付結(jié)果通知

    java實現(xiàn)微信支付結(jié)果通知

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)微信支付結(jié)果通知,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論