依旧是整理code文件夹里的东西,Fortran语言基本上被我当作化石了,除了在久远的“遗产代码”中你会看到这门语言,当今,应该没有人将它用作主要的编程语言。

我在学习Fortran的时候还是用的 g77,但是现在发现,在我的系统里只能使用gfortran来编译了。

下面是写过的唯一一个代码,其中C开头的是注释,编译方法是 gfortran helloworld.f -o helloworld

传统的 Fortran 程序只能用大写字符书写,而且每行前六个字符为特定用途所保留。第一列为字符 C 所保留,用来表征整行都是注释。第二列到第六列是为标号预留的。代码从第七列开始。下面是示例程序采用的是传统的 Fortran 格式。

C   helloworld.f
C
      PROGRAM HELLOWORLD
      WRITE(*,10)
   10 FORMAT('hello, world')
      END PROGRAM HELLOWORLD
C   http://wiki.ubuntu.org.cn/Compiling_Fortran77
c   g77 helloworld.f -o helloworld

希望这些老古董能尽早退役吧。


为什么我今天这么闲,可以更水这么多篇博客,那是因为昨天在家办公感觉比在办公室还累,所以索性不干了。(*  ̄︿ ̄)

本篇内容所有程序都是MATLAB/GNU Octave上运行的。

注意:有没有最后的end可能是上面两个编译环境的区别,但是我没有安装MATLAB,所以没法测试MATLAB现在的函数组成中是否仍旧不带最后一个end

数值微分法画线

众所周知,在屏幕上连续的点组成了线条。那么如何在计算机中模拟这些由“点”生成的线呢,这就是计算机图形学要研究的内容,其中最简单的一个问题就是画直线。

数值微分法( Digital Differential Analyzer,DDA)是一种处理此种问题的经典算法。

算法思想:

  1. 给定一条线段的起点\((x_1, y_1)\)和终点\((x_2, y_2)\),分别计算在两轴上的差值 \(\Delta y = y_{2} - y_{1}\) 和 \(\Delta x = x_{1} - x_{2}\)。
  2. 比较\(\Delta y\)和\(\Delta x\)二者谁比较大,大的那一个就作为遍历的总步数。\(steps = max(\Delta x, \Delta y)\)。我的程序中简化了这个部分,直接把x作为主序方向。
  3. 计算在x和y方向上单步的步距。 \(d_x = \frac{\Delta x}{steps}\),\(d_y = \frac{\Delta y}{steps}\)。我的程序里只计算了y方向的单步距离,x方向一直是“进1”。
  4. 我的程序中根据\(x_0\)和\(x_1\)的大小决定划线的方向,y增长的部分是根据斜率和目前点的位置来计算的。这个过程涉及大量的浮点运算,效率上是比较低的。
function [Xdata Ydata]=DDALine(x0,y0,x1,y1)
% DDALine(8,9,2,6)
% DDALine(2,6,8,9)
% DDALine(1,9,6,5)
% DDALine(6,5,1,9)
deltaX=x1-x0;
deltaY=y1-y0;
if deltaX~=0&&deltaY~=0
    Slope=double(deltaY)/double(deltaX);
    CurrentY=double(y0);
    j=1;
    if x0<x1
        for CurrentX=int8(x0):int8(x1)
                plot(CurrentX,int8(CurrentY-0.5),'* r');
                Xdata(j)=CurrentX;
                Ydata(j)=int8(CurrentY-0.5);
                hold on;
                
                CurrentY=Slope+CurrentY;
                j=j+1;
        end
    end
     if x0>x1
        for CurrentX=int8(x0):-1:int8(x1)
            plot(CurrentX,int8(CurrentY-0.5),'* r');
            Xdata(j)=CurrentX;
            Ydata(j)=int8(CurrentY-0.5);
            hold on;
            
            CurrentY=-Slope+CurrentY;
            j=j+1;
        end
    end
    title('DDAline');
    xlabel('x');
    ylabel('y');
    hold on
end
if deltaX==0&&deltaY~=0
    plot(x1,min(y0,y1):max(y0,y1),'* r');
end
if deltaX~=0&&deltaY==0
    plot(min(x0,x1):max(x0,x1),y0,'* r');
end
grid on;
end

Bresenham’s line algorithm

Bresenham line’s algorithm 是DDA的一种改进算法。它与DDA相比有质量和效率的两点改进:

  1. 以y方向为例,Bresenham line 根据斜率的方向,决定每一个点是离\(y_1\)还是\(y_2\)近,从而给出下一个点的位置究竟是y+1还是y-1。
  2. 由于上述原因,该方法避免了大量的浮点小数计算。
function  [a,k]=Bresenhamline(x0,y0,x1,y1)
% Bresenhamline(8,9,2,6)
% Bresenhamline(2,6,8,9)
% Bresenhamline(1,9,6,5)
% Bresenhamline(6,5,1,9)
dx=x1-x0;
dy=y1-y0;

d1=abs(2*dx);
d2=abs(2*dy);
x=x0;y=y0;

plot(x,y,'*');
a=[x y];
k=1;
if(abs(dx)>=abs(dy))
    e=-abs(dx);
while abs(x)~=abs(x1)
    if(dx>=0) x=x+1;end
    if(dx<0) x=x-1;end
    e=e+d2;
    if e>0
        if(dy>=0)y=y+1;end
        if(dy<0)y=y-1;end
        e=e-d1;          
    end
    hold on;
    a=[a;x y];k=k+1;
    hold on;
    plot(x,y,'*');
end
end
if(abs(dx)<abs(dy))
    e=-abs(dy);
while abs(y)~=abs(y1)
    if(dy>=0) y=y+1;end
    if(dy<0) y=y-1;end
    e=e+d1;
    if e>0
        if(dx>=0) x=x+1;end
            if(dx<0) x=x-1;end
        e=e-d2;          
    end
    hold on;
    a=[a;x y];k=k+1;
    hold on;
    plot(x,y,'*');
end
end
hold on;
grid on;
end

这因该是最近关于新冠最后的一篇博文了,由于我也在做相关的边缘辅助工作,工作量大,负能量也大,但是不能因为这些问题而让生活变得更糟。

由于美国政府对疫情应对不利,特朗普为了保护他的选举基本盘,已经丧心病狂的直呼新冠病毒是China/Chinese病毒,特朗普上台以后就一直在挑起种族歧视,称中国留学生是间谍,很多华裔学者/对华人有好的学者在美遭受无端调查和指控。

澳大利亚一直是美国的坚定支持者和追随者,反华政策这些年间也接连不断,疫情初期停止中国人入境的国家就属美国和澳大利亚最快。国内的普通人自然会对这两国有着强烈的不满。国内的媒体也会引导舆论,揭露这两国的政客对中国的无端指控和造谣。但是今天新闻出了一个消息“澳总理称美国是澳感染病例最大来源”,这一时间,让很多人认为澳大利亚站在了我们这边,开始谴责美国。结果很多人都在调侃,澳大利亚的立场要偏向中国了,因为他们想要医护物品援助。不管怎样解读,媒体都很好的带起了节奏 —— 即,更多的国家意识到美国是传播疫情的国家。(究竟是不是,我也不知道,但下结论必须有科学严谨的分析,目前的全球状况,我们还是多关注怎么控制传播,治疗疾病,早日结束疫情吧。) 殊不知,莫里森后面就说了新冠疫情起源于中国,传播到了全世界。

如果仔细听这期电台广播,你可以知道莫里森没有对任何国家进行谴责、辩护或者讨好,他只是在陈述他认为的事实情况:由于美澳交往密切,所以澳洲的病例大多源自美国,但是新冠疫情最初爆发在中国,传遍了整个世界。目前为止,没有证据表明任何国家,包括中国,在故意做任何事情。

这并不能说明澳大利亚看待疫情的立场出现了变化,并且开始偏向中国,指责美国。他们想不想借此要中国防护物资单说。

这让我想到n年前,我的同事为了介绍媒体的作用,用到的一幅图《不要让媒体定义你看待事物的方式》

Don't_let_media_define_the_way_you_see_things

媒体可以让人们了解真相,也可以做到颠倒黑白。

如果要看国外消息,最好找原始出处,就像国内的新闻会有“反转”一样,被别有用心剪辑的新闻,能让你对某些事物产生错误的看法。有条件就不要看剪辑后的内容,因为,它很有可能为了突出某种观点而掩盖内容的完整性。

对于中国的攻击会因为疫情而不断持续,并且在美国会变得是一件政治正确的事情,这会煽动很多人的反华情绪,海外华侨华人多保重吧。


我在做聘用制员工,单位在新冠疫情期间不给聘用制员工配备口罩(编制内员工有,从4月开始,他们也给我发口罩了,在这之前只有同事接济一下,但不清楚是否所有的聘用员工都有发,室与室之间是否存在差别。2020年5月3日更新);之前聘用制员工都没有年度体检,我去找领导要求体检(所以今年可以体检了);并且聘用制员工不给办理胸卡,因为疫情没胸卡的不能在食堂吃饭之后,为了吃饭给我们集体办理了胸卡。就先不说这么多乱七八糟的区别对待和疫情期间的一刀切政策了。

最近遇到了这么一个有点恶心的事情,我去吃饭,现在需要刷二维码填报个人信息,但是当时没有在进大楼门口时出示,被保安追来要求出去刷二维码,保安只会追我这种不穿白大衣的(难道单位就不觉得穿着白大衣去食堂很葬么。。。白大衣是工作服,总会曾到一些污染物。为啥食堂还不禁止穿白大衣打饭??这单位真的各种骚操作),因为他不确定我是否真的是员工。我就回到门口刷二维码,并且堵住了其他穿白大衣的员工,让他们也刷码或者出示刷好的截图。结果就堵住了中曾领导和其同事,他的同事也没有刷码,说自己早就刷过了,保安根本不拦截,直接让入内。我就指着那个人说他没有出示证明,之后又指着保安大声说了“要查一起查,不要区别对待”(我很生气),结果这位中层估计是觉得我让他挂不住面子,让我站住,说我不配合检查,不尊重保安,给我领导现在打电话,我还主动把胸卡还递给他,让他方面报我名字找我领导,中曾做完这些之后,可能感觉自己站在了什么制高点,高高兴兴的和同事一起走了。。。

当然,我必须说自己没有执行出示二维码凭证,是不按照规定做事,做得不对,对保安指着说话是不礼貌的,以后遇到这种事情不能自己激动。 但是单位里这么多员工,也不是每人进出大楼都会出示二维码。要执行规定,还应一视同仁。

这保安也就是官本位文化深入骨髓,以自己的规则代替规定,执行检查时,会影响自己饭碗的争一只眼闭一只眼,可以给自己增添“业绩”的严格做。就是有这样的下属和中层,执行规定时才会有漏洞,进而产生更大的问题。

对了,打饭出来,看见那位保安对其他穿白大衣的,也不检查。 ╮(╯_╰)╭

===============

2020年5月3日更新

更新来了,目前单位已经不知道到底要怎么查了,一开始都要查体温和二维码,然后只查体温,后来又变成只查二维码,保安也换了一波又一波。反正穿白大褂的查不严格。我觉得任何人穿个白大衣都能随便进出主楼。

===============

2020年5月27日更新

这个中层,今天大摇大摆的跟着自己的好朋友一起去吃饭,不亮二维码,毫无阻拦的进入主楼。只许州官放火,不许百姓点灯做得太标准了。


终于看完了几年前就计划看的电影,影片开始的灾难让我不知为何有一点脱戏,之前一直卡在了呆蒙被伙伴抛弃在火星的剧情最开始阶段,这部小说也躺在kindle里没有翻看过,这回终于看完了。不得不说的确是最近几年最好的科幻电影(没有之一)。

记得去年也看了中国科幻影史上最牛的流浪地球,和这部对比起来,流浪地球感觉幻想成分更多,是个大片,但是谁也不想生活在那样的地球时代。

火星救援更偏向现实风格,是登月的延伸,结合拯救呆蒙的主题,让观众更有同感。

但不管怎么说,看影片总觉得呆蒙的有些操作可以让他在火星死上好几次了,尤其是最后戳破太空服,凭借右手上的那个洞,能推进整个身体朝一个方向前进,过于理想化。

火星的两颗小土豆(卫星)完全没有在影片中露脸,其实这两颗卫星还是挺有意思的。

小说中内容在电影中有所删节,其中我看一些影评说,在小说中,如果食物补给失败,四个成员会吞药自杀,将唯一活下去的希望留给体型最小的成员,即便这样事物也还是不够完成计划,那么余下的时间,该成员将吃掉自己的队友。 这的确是可行方案,在其他一些科幻小说里的也看到过,星际旅行不可避免的极端问题。

2015年的影片剧本中,NASA为了营救宇航员,尚且能同中国合作(影片主要还是为了票房)。看看现在,多少科学家赴美参加学术会议都不能得到签证。这个世界变化的太快,保守主义壁垒能帮助我们在太空中走得更远吗?