编程示例:在H5画布上绘制毕达哥拉斯树

--------------------------绘制毕达哥拉斯的树形图案  04-25
function draw_tree()
{
  draw_square([300,100],[400,100],1);
}

function map_world_2_screen(a_p)
{
   return [a_p[0],600-a_p[1]];
}
function draw_triangle(a_p,b_p,leftorright)
{
  var point =[];
  var third_p=get_third_point_from_triangle(a_p,b_p,leftorright);
 
  point.push(map_world_2_screen(a_p));
  point.push(map_world_2_screen(b_p));
  point.push(map_world_2_screen(third_p));
 
  point.push(map_world_2_screen(a_p));
  draw_polygonal_line(point);
  
 var dis= get_distance(a_p,third_p);
   if(dis>4) 
   {draw_square(a_p,third_p,1);//leftorright);
    draw_square(b_p,third_p,-1);//leftorright*(-1));
   }
}

function draw_square(a_p,b_p,leftorright)
{
  var point =[];
  var third_p=get_third_point_from_square(a_p,b_p,leftorright);
  var fourth_p=get_fourth_point_from_square(a_p,b_p,leftorright);
  point.push(map_world_2_screen(a_p));
  point.push(map_world_2_screen(b_p));
  point.push(map_world_2_screen(third_p));
  point.push(map_world_2_screen(fourth_p));
  point.push(map_world_2_screen(a_p));
 
  draw_polygonal_line(point); 
  if (leftorright>0){
  draw_triangle(fourth_p,third_p,leftorright);}
  else {draw_triangle(third_p,fourth_p,leftorright);}
}
function get_cos_value(a_p,b_p,sin_value)
{
    var x_diff=a_p[0]-b_p[0];
    var y_diff=a_p[1]-b_p[1];
    var v=Math.sqrt(1-sin_value*sin_value);
    if(x_diff<=0) {v=v;}
    else {v=v*(-1);}
   return v;
}

function get_third_point_from_triangle(a_p,b_p,leftorright)
{
 var dis=get_distance(a_p,b_p)*0.6;
 var sin_v=get_sin_value(a_p,b_p);
 var cos_v=get_cos_value(a_p,b_p,sin_v);
 var sin_sum=0.6*sin_v+0.8*cos_v;
 var cos_sum=cos_v*0.6-0.8*sin_v;
 var ball_x=dis*cos_sum;
 var ball_y=dis*sin_sum;
 
 return [a_p[0]+ball_x,a_p[1]+ball_y];
}
function get_third_point_from_square(a_p,b_p,leftorright)
{
 var dis=get_distance(a_p,b_p);
 var sin_v=get_sin_value(a_p,b_p);
 var cos_v=get_cos_value(a_p,b_p,sin_v);
 var sin_sum=sin_v+cos_v*leftorright;
 var cos_sum=cos_v-sin_v*leftorright;
 var ball_x=dis*cos_sum;
 var ball_y=dis*sin_sum;
 
 return [a_p[0]+ball_x,a_p[1]+ball_y];
}

function get_fourth_point_from_square(a_p,b_p,leftorright)
{
 var dis=get_distance(a_p,b_p);
 var sin_v=get_sin_value(a_p,b_p);
 var cos_v=get_cos_value(a_p,b_p,sin_v);
 var sin_sum=cos_v*leftorright;
 var cos_sum=sin_v*(-1)*leftorright;
 var ball_x=dis*cos_sum;
 var ball_y=dis*sin_sum;
 
 return [a_p[0]+ball_x,a_p[1]+ball_y];
}
function get_sin_value(a_p,b_p)
{
    var x_diff=a_p[0]-b_p[0];
    var y_diff=a_p[1]-b_p[1];
    
    if(x_diff==0) { if(y_diff<=0) return 1;else {return -1;}}
    else if(y_diff==0) {return 0;}
    else {
    var ar=1.0/Math.sqrt(1+(x_diff*x_diff)/(y_diff*y_diff));  
       if(y_diff<=0) return ar; 
       else {return -ar;} 
    }
    
}
function get_distance(a_p,b_p)
{
   var x_diff=a_p[0]-b_p[0];
   var y_diff=a_p[1]-b_p[1];
   var dis=Math.sqrt(x_diff*x_diff+y_diff*y_diff);
   return Math.round(dis,0);
}
//----------------------end

绘制的结果如下:

编程示例:在H5画布上绘制毕达哥拉斯树相关推荐

  1. 如何运用html在画布上画画,如何使用js在画布上绘制图形

    在画布上,首先使用JavaScript的HTML DOM方法查找元素,在使用getContext()方法创建绘图对象,最后使用HTML DOM Canvas 对象的属性和方法绘制图形. HTML5元素 ...

  2. CAD教程:画布上绘制一些不规则图形

    大家在使用CAD过程中,有时可能需要在画布上绘制一些不规则图形,或者是自己设计一个签名,如果用直线或多线段命令操作比较麻烦,不仅画起来较混乱,还要不停的回车确定我们的坐标点,这时候大家可能会想CAD是 ...

  3. 逐帧绘制毕达哥拉斯树

    逐帧绘制毕达哥拉斯树 最近有点闲,于是就整点活,做了个逐帧绘制的毕达哥拉斯树.有利于你们理解递龟和异步的机制( ̄▽ ̄)/. 下面是代码: <html><body><can ...

  4. html 怎么在画布上绘制一个圆,javascript – 如何在画布上画一个圆圈?

    我使用 javascript和画布绘制一个数学设计的尺度(用于测量扭矩,包括牛顿米和英尺磅).我已经用三角法来定位我的刻度,自然地用弧线绘制电弧线.问题来了,当他们需要排队,但有一些奇怪的失真.然后我 ...

  5. 用python画背景_如何在有背景的画布上绘制图像

    我想用Tkinger做一个纸牌游戏.在设置一个表图像作为画布的背景.在 在桌子的背景上画卡片.这将通过单击按钮(此处未显示)来触发 问题是我不能在桌面背景上创建卡片图像.正确的方法是什么?我是否需要为 ...

  6. java 鼠标画矩形_用鼠标在画布上绘制Angular2绘制矩形

    我是angular2和画布的新手,我正在尝试创建一个首先将图像绘制到画布上的组件,然后用户可以使用鼠标在该图像上绘制矩形(以点击和拖动方式) . 这是我到目前为止几乎按预期工作的 . @Compone ...

  7. html5画布画点,在HTML5画布上绘制一个点

    6 个答案: 答案 0 :(得分:141) 如果您打算绘制大量像素,使用画布的图像数据进行像素绘制会更有效率. var canvas = document.getElementById("m ...

  8. html中圆角矩形怎么写,如何在HTML画布上绘制圆角矩形?

    要在HTML中绘制矩形,请使用canvas元素.对于画布,请使用该rect()方法绘制矩形.但是,对于创建圆角矩形,使用该rect()方法将不起作用.我们将使用lineTo()andquadratic ...

  9. html插入循环图片,javascript – HTML5在带有for循环的画布上绘制图片?

    所以,我想用 HTML5创建一个Minecraft网站主题.我在HTML5 / Javascript中有点摇摇欲坠(暂时没用过它),我需要一些帮助.我正在尝试计算一些可以放在屏幕上的16x16px瓷砖 ...

最新文章

  1. es6 Module语法
  2. android读取SDCard任意路径下的文件
  3. 详解基于朴素贝叶斯的情感分析及 Python 实现
  4. Oracle 执行计划
  5. java 翻转句子_Java编程-句子反转
  6. 高并发之服务降级和服务熔断____服务降级、熔断、限流的区别
  7. 缓存穿透-布隆过滤器
  8. 网络通信之通过get/post方式提交参数给web应用
  9. Ubuntu下RabbitMQ安装
  10. html 做王者荣耀
  11. rpc portmap rpcbind vxi11
  12. 真值表-Python实现
  13. ARM嵌入式系统的问题分析与总结
  14. 卡方检验结果表格中出现非常多个卡方值和P值的原理和实现步骤
  15. 电主轴故障分析及正确处理方法
  16. 360cdn能挡住cc攻击_人人用得起的CDN加速服务,可防御CC攻击
  17. (38)骨网格物体骼Actor
  18. 算力越大越牛逼?地平线与Mobileye等的共识是......
  19. 美国虚拟主机空间是什么以及具有哪些特点?
  20. 品牌与商家如何做电商直播运营的呢?

热门文章

  1. python维护代理池脚本
  2. 【业务知识】Super-Smack和迅雷休闲游戏架构
  3. 一个cordova App最近的上线问题记录
  4. 让自己成为一个幽默有涵养的人
  5. Web开发者不容错过的20段CSS代码
  6. [ISPRS数据集1]ISPRS中2D语义标签数据介绍
  7. 突击蓝桥杯嵌入式(七)——第十三届省赛第一场真题
  8. 2022年全国最新初级消防设施操作员模拟题库及答案
  9. 公司股权结构顶层设计方案(案例)
  10. 湖南凤凰古城--美丽的湘西小城