fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. // your code goes here
  13. }
  14. }
Success #stdin #stdout 0.1s 54660KB
stdin
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

# 自定义颜色映射
geo_cmap = LinearSegmentedColormap.from_list('geo', ['#004400','#228822','#887722','#774411'])
city_cmap = LinearSegmentedColormap.from_list('city', ['#000000','#666666','#aaaaaa'])
fire_cmap = LinearSegmentedColormap.from_list('fire', ['#330000','#ff3300','#ffff00'])

class Planet:
    def __init__(self, size=1000):
        self.size = size
        self.generate_terrain()
        self.generate_hydrology()
        self.generate_cities()
        self.generate_biomes()
        
    def generate_terrain(self):
        """使用Perlin噪声生成地形"""
        x = np.linspace(0, 10, self.size)
        y = np.linspace(0, 10, self.size)
        self.terrain = np.random.rand(self.size, self.size)
        
    def generate_hydrology(self):
        """生成水域分布"""
        self.water = np.zeros((self.size, self.size))
        # 添加随机水域和河流
        self.water += np.random.rand(*self.water.shape)*0.3
        self.water = np.clip(self.water, 0, 1)
        
    def generate_cities(self):
        """生成城市分布(简化模型)"""
        self.cities = np.zeros((self.size, self.size))
        # 在平坦区域生成城市
        flat_areas = (self.terrain > 0.4) & (self.terrain < 0.6)
        self.cities[flat_areas] = np.random.rand(np.sum(flat_areas))*0.8
        
    def generate_biomes(self):
        """生成生物群落分布"""
        self.biomes = np.zeros((self.size, self.size))
        # 基于水和地形生成生物
        self.biomes = np.clip((1-self.water)*self.terrain, 0, 1)
        
    def apply_impact(self, impact_pos, energy):
        """应用碰撞影响"""
        # 创建冲击波掩模
        x, y = np.ogrid[:self.size, :self.size]
        dist = np.sqrt((x-impact_pos[0])**2 + (y-impact_pos[1])**2)
        
        # 地形改变(弹坑形成)
        self.terrain -= np.exp(-dist/(energy*0.1)) * 0.5
        self.terrain = np.clip(self.terrain, 0, 1)
        
        # 水域蒸发
        self.water = np.where(dist < energy*0.2, 0, self.water)
        
        # 城市破坏
        city_damage = np.exp(-dist/(energy*0.05))
        self.cities = np.clip(self.cities - city_damage*2, 0, 1)
        
        # 引发山火
        self.fire = np.exp(-dist/(energy*0.15)) * (1 - self.water)
        
        # 生物灭绝
        self.biomes = np.where(dist < energy*0.3, 0, self.biomes)

class CollisionSimulator:
    def __init__(self):
        self.earth = Planet()
        self.impact_energy = 0
        self.impact_position = (500, 500)
        
    def simulate_impact(self, energy=100):
        """执行碰撞模拟"""
        self.impact_energy = energy
        self.earth.apply_impact(self.impact_position, energy)
        
    def visualize(self):
        """创建可视化视图"""
        fig, axs = plt.subplots(2, 2, figsize=(20, 20))
        
        # 地形图
        axs[0,0].imshow(self.earth.terrain, cmap=geo_cmap)
        axs[0,0].set_title('地质结构')
        
        # 水文与城市
        water_mask = np.ma.masked_where(self.earth.water < 0.3, self.earth.water)
        axs[0,1].imshow(water_mask, cmap='Blues', alpha=0.5)
        axs[0,1].imshow(self.earth.cities, cmap=city_cmap, alpha=0.7)
        axs[0,1].set_title('水域与城市')
        
        # 生态与山火
        axs[1,0].imshow(self.earth.biomes, cmap='Greens', alpha=0.7)
        fire_mask = np.ma.masked_where(self.earth.fire < 0.1, self.earth.fire)
        axs[1,0].imshow(fire_mask, cmap=fire_cmap, alpha=0.6)
        axs[1,0].set_title('生物群落与山火')
        
        # 综合影响
        impact_area = np.exp(-np.square(np.linspace(-1,1,1000)))*self.impact_energy
        axs[1,1].imshow(self.earth.terrain, cmap=geo_cmap)
        axs[1,1].imshow(impact_area, cmap='Reds', alpha=0.4,
                      extent=(self.impact_position[1]-500, self.impact_position[1]+500,
                              self.impact_position[0]+500, self.impact_position[0]-500))
        axs[1,1].set_title('综合碰撞影响区')
        
        plt.show()

# 运行模拟
sim = CollisionSimulator()
sim.simulate_impact(energy=200)
sim.visualize()
stdout
Standard output is empty