海岸线算法,蒋同学请看 ( 积分: 10 )

  • 主题发起人 主题发起人 muhx
  • 开始时间 开始时间
M

muhx

Unregistered / Unconfirmed
GUEST, unregistred user!
模拟海岸线的曲线。
以前高中物理课本上有个海岸线有多长的问题。
就是说在两个点之间无限分割。分割越细致海岸线就越长。
度量尺寸不一致,测量尺长度就不一样。
这个程序就是模拟这个问题的。
难处在数学问题:求两个点的中垂线上到它们连线的距离等于连个点之间的距离的点。
我自己以前数学没学好。我找到了以前高中的朋友帮忙把数学问题解决了。
现在才感觉数学很重要。以下是代码。
/////////////////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Drawing;
using System.Drawing.Text;
class haidao{
static Bitmap bmp=new Bitmap(800,800);
static Graphics g=Graphics.FromImage(bmp);
static Pen curvepen=new Pen(Color.Red);
static FontFamily fontfml=new FontFamily(GenericFontFamilies.Serif);
static Font font=new Font(fontfml,30);
static SolidBrush brush=new SolidBrush(Color.White);
static int i=0;
static Random rnd=new Random();
static void Main(){
curvepen.Width=3;
g.DrawString("Haidao using C# drawing this.",font,brush,50,10);
font=new Font(fontfml,8);
Point st,en;
st=new Point(100,100);
en=new Point(700,700);
qline(st,en,4);
bmp.Save("haidaoline.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
}
static Point getmidpoint(Point pt1,Point pt2,int i){
Point midpt=new Point();
int m=(int)((pt1.X+pt2.X)/2);
int n=(int)((pt1.Y+pt2.Y)/2);
if(i==1){midpt.X=m+(pt1.Y-pt2.Y);}else{midpt.X=m-(pt1.Y-pt2.Y);}
midpt.Y=(int)((((pt2.X-pt1.X)*(midpt.X-m))/(pt1.Y-pt2.Y))+n);
return midpt;
}
static void qline(Point pt1,Point pt2,int deepth){
if(deepth==0){
g.DrawLine(curvepen,pt1,pt2);
g.DrawString(i.ToString(),font,brush,pt1.X,pt1.Y-20);
i++;
}else{
int i=rnd.Next(2);
int xs=(int)((pt2.X-pt1.X)/3);
int ys=(int)((pt2.Y-pt1.Y)/3);
Point pt3=new Point(xs+pt1.X,ys+pt1.Y);
Point pt4=new Point(xs*2+pt1.X,ys*2+pt1.Y);
Point ptm=getmidpoint(pt3,pt4,i);
qline(pt1,pt3,deepth-1);
qline(pt3,ptm,deepth-1);
qline(ptm,pt4,deepth-1);
qline(pt4,pt2,deepth-1);
}
}
};
 
看完就行了,随便上个人我放分结贴
 
看完了, 不懂, 呵呵
 
接受答案了.
 
后退
顶部