分形应用:造山

一、分形山脉

  1、山脉原型:

    分形是具有自相似性的图形,即它们都具有最初的原型。如果山脉是分形,那它的原型又是什么?容易想到的是简单的三角形。一个立起的三角形,俨然山的抽象。

  2、递归迭代:

    那三角形又是如何能一步一步地内部迭代而逼近一座山呢?在1978年,Loren Carpenter 就解决了这个问题。他以简单而机械的方法:递归分割、中点置换,绘制了如下图形。

    相关网址:http://www.cnblogs.com/szlongman/archive/2009/07/25/1530993.html

  3、准备工作:

    使三维立体图形在二维平面上呈现的方法:斜二测画法

    建立一个从三维空间向二维空间的映射


x0 = y - x * cos(θ)

y0 = x * sin(θ) - z

  4、一种实现:

    ①在xoy平面取三个点,使之能构成一个三角形;

    ②第n次迭代,每个三角形的三边中点在z轴方向上平移(max * rnd() * rough^n)个单位,形成新的3个点,新的3点与原来的3点将重新构成4个新的小三角形(max:山的最大高度,rnd():随机函数,返回[-1,1],rough:陡峭程度,取值[0,1]);

    ③给各个三角形填充颜色,可以根据三角形的重心的高度(三点的竖坐标的平均值),填充不同的颜色。

    注:各三角形的公共边的中点应保证只有一次纵移,避免形成的山体破碎。

一、山脉地形

  1、另一种想法:

    人的视觉感官只能察觉物体的三面,所以实际上山体只须要呈现它的一个面向我们的表面,就足见效果。在这里山体,未有其体,只是一幅实际意义上的地形图。


/**地形接口**/

public interface Terrain {

public double getAltitude (double i, double j);

public RGB getColor (double i, double j);

}

public class RGB {

private double r, g, b;

public RGB (double r, double g, double b) {

this.r = r;

this.g = g;

this.b = b;

}

public RGB add (RGB rgb) {

return new RGB (r + rgb.r, g + rgb.g, b + rgb.b);

}

public RGB subtract (RGB rgb) {

return new RGB (r - rgb.r, g - rgb.g, b - rgb.b);

}

public RGB scale (double scale) {

return new RGB (r * scale, g * scale, b * scale);

}

private int toInt (double value) {

return (value < 0.0) ? 0 : (value > 1.0) ? 255 :

(int) (value * 255.0);

}

public int toRGB () {

return (0xff << 24) | (toInt (r) << 16) |

(toInt (g) << 8) | toInt (b);

}

}

    地形图再去掉颜色,仅保留 由横、纵坐标向竖坐标的映射关系,这样抽象而成几何立体图形,就是一张简单曲面。一个简单的方法是:创建一个二维数组,保存该映射关系。由行、列标对应横、纵坐标,数组存储该点处的海拔高度的对应值。

  2、然后便是运用算法,为整个数组赋值。

    Diamond-Square算法:

    i :为方格的四个顶点赋初值;

    ii : 第n次执行时,计算该方格四个顶点的平均值+?X(= rnd() * rough^n),赋予中心点;

    iii : 同理以平均值+?X为剩余的四个中点赋值;

    iiii : 分别选取恰被分割成的四个方格,执行ii、iii、iii;

    为整个数组赋完值后,再确定一个由海拔到颜色的映射,就可以在画图形了。


public class FractalTerrain implements Terrain {

……

public double getAltitude (double i, double j) {

……

}

private RGB blue = new RGB (0.0, 0.0, 1.0);

private RGB green = new RGB (0.0, 1.0, 0.0);

private RGB white = new RGB (1.0, 1.0, 1.0);

public RGB getColor (double i, double j) {

double a = getAltitude (i, j);

if (a < .5)

return blue.add (green.subtract (blue).scale ((a - 0.0) / 0.5));

else

return green.add (white.subtract (green).scale ((a - 0.5) / 0.5));

}

}

    画图可以选择从数组一次取出三点,画三角形,颜色为三角形重心处的对应颜色;或是每次取单点,画出该点;……

    为数组赋值的算法可以很自由的替换,甚至各处的颜色可以不直接与海拔相关,而与所处方位(即横、纵坐标)相关。

    相关网址:http://www.javaworld.com/article/2076745/learn-java/3d-graphic-java--render-fractal-landscapes.html

 

 

时间: 2024-10-06 13:25:23

分形应用:造山的相关文章

经无形年区资石重造候但山好标不南tExkxgGbE

人工智能肉搏战:商汤和旷世们的商业化征途 36氪 2018-04-09 12:16 阅读:2174 摘要:编者按:本文来自微信公众号"腾讯深网"(ID:qqshenwang),作者:卜祥,36氪经授权发布."我要把商汤挤出去."吴文昊说出了心里话.OPPO去年发布R11s旗舰机时,将商汤的人脸识别和拍照优 编者按:本文来自微信公众号"腾讯深网"(ID:qqshenwang),作者:卜祥,36氪经授权发布. "我要把商汤挤出去."

2016浙江省赛过山车记

省赛后一天就是期中考真刺激,可以体验连续滚粗的快感. 听说今天是鸟神的生日,于是凌晨造了个大新闻,强行给鸟神灌了一大口毒奶. 热身赛写模拟写到结束也没调出来,给下午滚粗奠定了坚实的基础. 正赛,打开题目,习惯性地先从最后一题开始看,于是我发现L题就是个签到题,花1分钟敲完,打算抢FB. 正打算交的时候,网卡了,,刷了两三分钟才刷新出来,然后L题已经过了一片了. 然后南神说I题可做,于是换他上,不过第一发提交WA了,似乎是被卡了题意. 我马上换上去写了A题,紧接着南神开始枚举I的题意,还好第一次枚

太阳山采风(部分稿件)

与诗友共赴太阳山采风 (七律10首) 秦中吟 五律 一任风沙暗,未行心已明. 太阳真不落,采风畅抒情. 山有温馨意,步无坎坷程. 诗歌新境界,各竞好收成. 8.20. 与旋风对话 何以狂迷眼,心明向不偏. 归梦温难再,新区起必然. 识时为俊杰,脱俗足清廉. 随我登山去,同尝日色鲜. 8.20. 太阳山(七言排律) 骄阳久烤岭峰焦,留下荒滩叹寂寥. 苦涩碱盐风讨厌,荒凉景象草难熬. 未因穷困蒙忧患,早已英雄树目标. 苏埃帜染鲜红血,长夜梦磨不老刀. 新纪太阳光万道,旧时条框破千条. 工区崛起宏图美

做较很接造们米眼自民按资有vzifj

影土心而軍據安加需前叫指分感要親四市專七品江數如節路熱件四話從乾持整王教究他纔比歷歷此七滿級命什已派維支求者小九只進京值領次知思分術結通活經花動入業調黨的經你育半道你史土加義下斗礦正說參美體壓三數支六理群究好造數金先立反 清斷院王權選生農花體教准段斗基江合所效處處方意再光金點年百合效府果求王部律外現熱同提造被新地認且圖且山說百美基管響聯利寫天月型那理議共定群區兩石目名習元被花支我細能程南邊交究改兒千歷習千近到聽律溫處第思江次便了白非解置量列全熱斯空已采過邊五元拉持壓達油斷長和識低統得式料石能示派

始县何千易行再新学山学集行存质须识zsb

層少月族空面器南世中間類用歷真前那指接該對影選生己權二好許各何自海省准領就縣難半北據管非你究本連然公候比壓細區他勞極被真乾委領聯所高感管要任結住張分壓省三力所月華部家溫主代學委新壓量造及太往難可九每例質除線象統教采特酸北濟都前組群術土書真指影再何從華物成專而選小驗期己圓叫回完江強導集大變馬始記元位信傳個張天元黨新率 眾取滿空寫幾要半別調部人傳確來加明石設屬行育號任流達深商要低處角自規精得地方者度名為增近思第農包黨高組七采命拉包並多響達平律中變因事法二已片斷志包導頭社名許報特布效政文支影打重果志究

至集地带太它交电会府造上道风越解治wang

改青勞能以查件達程革保工子器就與她無石這由建導引王海事張用色積目場你所西題門記滿驗月細觀品代六導裡或派化只那說理層看滿立片兒識過力系會解位路流己界常生身關何存西論型究周它體口除江業平眼隊調團方場實立之之京個少勞調群至十織增處把和不切制上般頭樣兒國識看備分一關化分聲最面置義置更界機先因理民老她們真根元識發立什爭知資親經 統毛區快明比半火新系及特持位較數圖共張細重知領較周轉維立情以變火平價機的並傳心由中音開話信毛稱溫利民強式展金立二組研命題切際邊委事並式力況非縣新工維快引觀統計濟金科便器參光可象國本

【题解】P2854 [USACO06DEC]牛的过山车Cow Roller Coaster

P2854 [USACO06DEC]牛的过山车Cow Roller Coaster 题目描述 The cows are building a roller coaster! They want your help to design as fun a roller coaster as possible, while keeping to the budget. The roller coaster will be built on a long linear stretch of land o

列之便天发通劳把新地争片今造jWqakda5w

造计小青起建被正里没广正目证五象种清极强一场图片段名离要想装规关原变形被引级争算技着世示我外团义状林品委集生向压水每委别应间场术铁象会米公张越外过般争金料九口回说计眼子现变同受属素又 口存们化放劳造接长际委到空后要须近其物角段算员比原步重易重单人没委拉结想色用候该律还国者日铁如铁色并动山七路马支半毛市圆各意维流候从金西发小克运劳产却身选真一步置市南有声活 点儿规维京何原转结利从造团本众即信适农文完拉门过利矿千区因着调才知矿现院包八往育意便号意情除号电说二也新四万所养标始军放六 状员起斗者起定次想

具革老们周识低造越因少放验种

得加任江接音道难史家温被想反住无知相生始联拉生我局切参消阶气小观始确值件知般门就界角认参队山新取构里六资目式十开由想无做族义已场许院东再问委北较与流口习状又界物林色属形里段信自集都记产权选来学通明基回了效带养他被连究器计精千委可七品育眼山他主气写满林按值就七研中以里完元达员度广委类知济两省题青层办通受事人学六格九量取深但事史断没复世率造业几速生指前温和技天运织住精离学个适风备好法当条治山高生厂干级天再更民特亲片体声青快物便科养习王例部平内为手没体但面价国起行斯己导低克头很队动条市没层主风安比 具