女神节笛卡尔式的表白的程序实现方式
Author:zhoulujun Date:
秘书说女神节到了,里面程序员是如何表白的呀?有没有事啥花样。之前不是看过《隐秘的角落》笛卡尔式表白吧。
于是标题党感觉刷篇文章《女神节笛卡尔式的表白的程序实现方式》,这个故事对于痴情的迷妹应该杀伤力蛮大
笛卡尔,西方近代哲学之父,解析几何之父,理性分析方法的奠基人,是一位深受西方人尊敬的科学家、思想家——这位沉静多思的哲学家、科学家,和英国的培根一起,共同开创了西方现代哲学的新起点:认识论转向。
笛卡尔的我思故我在的命题,直接针对基督教和感觉主义认识论。
贝克莱、笛卡尔等人的思想,也是西方近代唯心主义、唯物主义的来源。
笛卡尔、莱布尼茨的理性主义和洛克、休谟的经验主义,才使得后来的康德写作三大批判
笛卡尔的分析主义认识方法,影响深远,对于西方现代自然科学的发展,产生了巨大推动作用,如物理学、化学、生物解剖学、心理学等。
笛卡尔的主要数学成果集中在他的“几何学”中。
笛卡尔的思想核心是:把几何学的问题归结成代数形式的问题,用代数学的方法进行计算、证明,从而达到最终解决几何问题的目的。即是解析几何。1637年,笛卡尔发表了《几何学》,创立了直角坐标系。
可能这些大神的爱情故事,对于大众更感兴趣。传说中的笛卡尔和公主:
1650年,52岁却一直贫困的数学家笛卡尔在斯德哥尔摩的街头尔邂逅了18岁的瑞典公主克里斯汀。克里斯汀不仅不嫌弃笛卡尔,还和他讨论数学。之后,公主让笛卡尔进宫当自己的数学老师,两人经过相处爱上了对方。笛卡尔和公主之间相差34岁不说,两人之间还有阶级差距,国王大怒,赶走了笛卡尔,软禁了公主。回到法国的笛卡尔坚持给公主写信,但信件全都被国王拦截。
笛卡尔在给克里斯汀寄出第十三封信后就气绝身亡了,这第十三封信内容只有短短的一个公式:r=a(1-sinθ)。公主看到后,立即明了恋人的意图,她马上着手把方程的图形画出来,看到图形,她开心极了,她知道恋人仍然爱着她,原来方程的图形是一颗心的形状。这也就是著名的“心形线”。
心形线的平面直角坐标系方程表达式分别为 :
x^2+y^2+a*x=a*sqrt(x^2+y^2)
极坐标方程
水平方向: ρ=a(1-cosθ) 或 ρ=a(1+cosθ) (a>0)
垂直方向: ρ=a(1-sinθ) 或 ρ=a(1+sinθ) (a>0)
如果我们用JavaScript在canvas上画出来,就需要算出x、y坐标,然后再canvas画出来
x = 2r(sinθ-.5*sin(2θ))
y = 2r(cosθ-.5*cos(2θ))
关键代码如下:
const x=dimension*(Math.sin(radians)-.5*Math.sin(2*radians)) const y=dimension*(Math.cos(radians)-.5*Math.cos(2*radians))
整体绘制如下:
const canvas = document.getElementById("canvas"); const context = canvas.getContext("2d"); //线条设置 context.strokeStyle = "red"; context.lineWidth = 2; //创建坐标 function descartesArr(dimension,rx,ry){ //线条数组 const points = []; for(let degrees =0;degrees<361;degrees++){ const radians = degrees * (Math.PI/180); const x=dimension*(Math.sin(radians)-.5*Math.sin(2*radians)) const y=dimension*(Math.cos(radians)-.5*Math.cos(2*radians)) points.push([x+rx,y+ry]) } return points } function paint(points) { context.beginPath(); let first = points.unshift() context.moveTo(first[0], first[1]); points.forEach((item)=>{ context.lineTo(item[0], item[1]); context.moveTo(item[0],item[1]); }) context.closePath(); context.stroke(); } paint(descartesArr(30, 100, 100)); function heartShape(r, dx, dy) { //r:大小;dx:水平偏移;dy:垂直偏移;c:颜色 var m, n, x, y, i; let arr = []; for (i = 0; i <= 7.9; i += 0.04) { m = i; n = -r * ((Math.sin(i) * Math.sqrt(Math.abs(Math.cos(i)))) / (Math.sin(i) + 1.4) - 2 * Math.sin(i) + 2); x = n * Math.cos(m) + dx; y = n * Math.sin(m) + dy; arr.push([x,y]); } return arr; }
其实,这个故事并不可靠。1649 年10 月4日应瑞典女王克里斯蒂娜邀请笛卡尔是来瑞典做她的老师,但这个女王很可能是个女同志……
回归理性:
r=a(1-sinθ),这是个极坐标方程在17世纪还是新鲜玩意儿,而三角函数的定义以及sin、cos这些符号是欧拉在十八世纪的创举,从时间线来说并不科学。
但是不管这么多,没有人能拒绝心形曲线的浪漫,除了广为流传的r=a(1-sinθ),还有很多种曲线也是心形的形状。
心脏线亦为蚶线的一种。在曼德博集合正中间的图形便是一个心脏线。心脏线的英文名称“Cardioid”是 de Castillon 在1741年的《Philosophical Transactions of the Royal Society》发表的;意为“像心脏的”。
比如这个,绘制的就更好
function heartShape(r, dx, dy) { var m, n, x, y, i; let arr = []; for (i = 0; i <= 7.9; i += 0.04) { m = i; n = -r * ((Math.sin(i) * Math.sqrt(Math.abs(Math.cos(i)))) / (Math.sin(i) + 1.4) - 2 * Math.sin(i) + 2); x = n * Math.cos(m) + dx; y = n * Math.sin(m) + dy; arr.push([x,y]); } return arr; }
其实就是画 个心 ,感冒非得搞这么复杂?
贝塞尔曲线不好使?直接 Adobe Illustrator 画个曲线,然后把里面的贝塞尔曲线点扣出来不就行了
比如:https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes
function draw(canvas,ctx) { //三次贝塞尔曲线 ctx.beginPath(); ctx.moveTo(75, 40); ctx.bezierCurveTo(75, 37, 70, 25, 50, 25); ctx.bezierCurveTo(20, 25, 20, 62.5, 20, 62.5); ctx.bezierCurveTo(20, 80, 40, 102, 75, 120); ctx.bezierCurveTo(110, 102, 130, 80, 130, 62.5); ctx.bezierCurveTo(130, 62.5, 130, 25, 100, 25); ctx.bezierCurveTo(85, 25, 75, 37, 75, 40); context.closePath(); context.stroke(); // ctx.fill(); }
当然,更简单的,css也行拉
.
其实就是一个矩形,一边圆角,然后旋转,就行
.heart { position: relative; width: 100px; height: 90px; margin: 10px; } .heart:before, .heart:after { position: absolute; content: ""; left: 50px; top: 0; width: 50px; height: 80px; background: red; border-radius: 50px 50px 0 0; transform: rotate(-45deg); transform-origin: 0 100%; } .heart:after { left: 0; transform: rotate(45deg); transform-origin: 100% 100%; }
这个实现最方便。
其实,实现的方式太多:http://www.mathematische-basteleien.de/heart.htm
以上代码的demo地址:https://www.zhoulujun.cn/demo/heart.html
其实,这个也是只是标题党而已,盗图解说下
其实,这个就够了
愿女神节,每位女神都有一个好的家庭,好的父亲、子女、爱人……
多给女神一点关爱,一个问候,一声祝福,放在心中就足够
其实本文只是个标题党,目的在于提醒广大程序员,关爱女神!
转载本站文章《女神节笛卡尔式的表白的程序实现方式》,
请注明出处:https://www.zhoulujun.cn/html/theory/Mathematics/math/2021_0306_8621.html