笛卡尔心形曲线

  1650年,斯德哥尔摩的街头,52岁的笛卡尔邂逅了18岁的瑞典公主克里斯汀。 
  那时,落魄、一文不名的笛卡尔过着乞讨的生活,全部的财产只有身上穿的破破烂烂的衣服和随身所带的几本数学书籍。生性清高的笛卡尔从来不开口请求路人施舍,他只是默默地低头在纸上写写画画,潜心于他的数学世界。 
  一个宁静的午后,笛卡尔照例坐在街头,沐浴在阳光中研究数学问题。他如此沉溺于数学世界,身边过往的人群,喧闹的车马队伍。都无法对他造成干扰。 
  突然,有人来到他旁边,拍了拍他的肩膀,“你在干什么呢?”扭过头,笛卡尔看到一张年轻秀丽的睑庞,一双清澈的眼睛如湛蓝的湖水,楚楚动人,长长的睫毛一眨一眨的,期待着他的回应。她就是瑞典的小公主,国王最宠爱的女儿克里斯汀。 
  她蹲下身,拿过笛卡尔的数学书和草稿纸,和他交谈起来。言谈中,他发现,这个小女孩思维敏捷,对数学有着浓厚的兴趣。 
  和女孩道别后,笛卡尔渐渐忘却了这件事,依旧每天坐在街头写写画画。 
  几天后,他意外地接到通知,国王聘请他做小公主的数学老师。满心疑惑的笛卡尔跟随前来通知的侍卫一起来到皇宫,在会客厅等候的时候,他听到了从远处传来的银铃般的笑声。转过身,他看到了前儿天在街头偶遇的女孩子。慌忙中,他赶紧低头行礼。 
  从此,他当上了公主的数学老师。 
  公主的数学在笛卡尔的悉心指导下突飞猛进,他们之间也开始变得亲密起来。笛卡尔向她介绍了他研究的新领域——直角坐标系。通过它,代数与几何可以结合起来,也就是日后笛卡尔创立的解析几何学的雏形。 
  在笛卡尔的带领下,克里斯汀走进了奇妙的坐标世界,她对曲线着了迷。每天的形影不离也使他们彼此产生了爱慕之心。 
  在瑞典这个浪漫的国度里,一段纯粹、美好的爱情悄然萌发。 
  然而,没过多久,他们的恋情传到了国王的耳朵里。国王大怒,下令马上将笛卡尔处死。在克里斯汀的苦苦哀求下,国王将他放逐回国,公主被软禁在宫中。 
  当时,欧洲大陆正在流行黑死病。身体孱弱的笛卡尔回到法国后不久,便染上重病。在生命进入倒计时的那段日子,他日夜思念的还是街头偶遇的那张温暖的笑脸。他每天坚持给她写信,盼望着她的回音。然而,这些信都被国王拦截下来,公主一直没有收到他的任何消息。 
  在笛卡尔给克里斯汀寄出第十三封信后,他永远地离开了这个世界。此时,被软禁在宫中的小公主依然徘徊在皇宫的走廊里,思念着远方的情人。 
  这最后一封信上没有写一句话,只有一个方程:r=a(1-sinθ)。 
  国王看不懂,以为这个方程里隐藏着两个人不可告人的秘密,便把全城的数学家召集到皇宫,但是没有人能解开这个函数式。他不忍看着心爱的女儿每天闷闷不 乐,便把这封信给了她。拿到信的克里斯汀欣喜若狂,她立即明白了恋人的意图,找来纸和笔,着手把方程图形画了出来,一颗心形图案出现在眼前,克里斯汀不禁 流下感动的泪水,这条曲线就是著名的“心形线”。 
  国王去世后,克里斯汀继承王位,登基后,她便立刻派人去法国寻找心上人的下落,收到的却是笛卡尔去世的消息,留下了一个永远的遗憾…… 
  这封享誉世界的另类情书,至今,还保存在欧洲笛卡尔的纪念馆里。

 

<!DOCTYPE html>
<html>

    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>

    <body>
        <!--<noscript>r = a(1-sin"theta")</noscript>-->
        <canvas id="cardioid" width="600" height="600" style="background: lightblue">
            您的浏览器不支持canvas!
        </canvas>
        <script>
            var cr = document.getElementById("cardioid");
            var W = cr.width/2, H = cr.height/3, R = 150;
            var c = cr.getContext("2d");
            var G = 360, g = 0, T = Math.PI*2, t = T/G;
            c.save();
            c.translate(W, H);
            c.rotate(-T/4);
            //c.fillStyle = "red";
            while(g < G){
            c.save();//c.translate(W, H);
            c.rotate(g*t);
            c.beginPath();
            c.arc(0, -R*(1-Math.sin(++g*t)), 13, 0, 360, false);
            c.closePath();
            c.fill();
            c.restore();
            }
            c.restore();
            g = 0;
            (function draw(){
            if(g < G){
            c.save();
            c.translate(W, H);
            c.rotate(-T/4 + g*t);
            c.fillStyle = "red";
            c.beginPath();
            c.arc(0, -R*(1-Math.sin(++g*t)), 5, 0, 360, false);
            c.closePath();
            c.fill();
            c.restore();
            }
            setTimeout(draw, 1);
            })();
        </script>
    </body>

</html>

<!doctype html>
<html>

    <head>
        <meta charset=‘UTF-8‘ />
        <title>Cardioid</title>
    </head>

    <body style="text-align:center;">
        <canvas id="pad" width=‘500‘ height=‘500‘>你不换一个浏览器,比如chrome,将无法知道这个秘密。</a>
        </canvas>
        <script type="text/javascript">
            var $id = function(n) {
                return document.getElementById(n) || n;
            }
            window.addEventListener("load", draw, false);
            var con = $id("pad").getContext(‘2d‘);
            con.fillStyle = ‘#e21f27‘
            con.translate(200, 100);

            function draw() {
                var r = 0,
                    a = 100,
                    start = 0,
                    end = 0;
                con.rotate(Math.PI);
                for (var q = 0; q < 500; q++) {
                    start += Math.PI * 2 / 500;
                    end = start + Math.PI * 2 / 500;
                    r = a * (1 - Math.sin(start)); //心形极坐标表示法
                    con.arc(0, 0, r, start, end, false);
                }
                con.fill();
            }
        </script>
    </body>

</html>

 1 <html>
 2     <head>
 3         <meta charset=‘UTF-8‘ />
 4         <title>LOVE</title>
 5     </head>
 6     <body style="text-align:center;">
 7         <canvas id="pad" width=‘300‘ height=‘500‘>提醒您:ie低版本用户请更新你的浏览器</canvas>
 8         <script type="text/javascript">
 9             var $id = function(n) {
10                 return document.getElementById(n) || n;
11             }
12             window.addEventListener("load", draw, false);
13             var con = $id("pad").getContext(‘2d‘);
14             con.fillStyle = ‘#e21f27‘
15             con.translate(100, 100);
16
17             function draw() {
18                 var r = 0,
19                     a = 20,
20                     start = 0,
21                     end = 0;
22                 con.rotate(Math.PI);
23                 for (var q = 0; q < 1000; q++) {
24                     start += Math.PI * 2 / 1000;
25                     end = start + Math.PI * 2 / 1000;
26                     r = a * Math.sqrt(225 / (17 - 16 * Math.sin(start) * Math.sqrt(Math.cos(start) * Math.cos(start))))
27                     con.arc(0, 0, r, start, end, false);
28                 }
29                 con.fill();
30             }
31         </script>
32     </body>
33 </html>
时间: 2024-11-12 20:19:51

笛卡尔心形曲线的相关文章

笛卡尔心形线

Matlab代码: close all; alpha = -pi : pi/50 : pi; x = 2*cos(alpha);y = 2*sin(alpha);for p=1:length(x)        alpha1 = -pi : pi/100 : pi;         x1 = 1*cos(alpha1);        y1 = 1*sin(alpha1);        hold on;        plot(x(1,p)+x1,y(1,p)+y1-1,'g');endaxi

实现笛卡尔心形线的重复循环绘制

HTML部分: 1.<a onclick="logoClick()"></a> 2.<div id="canvasZone">   <canvas id="myCanvas"></canvas>   </div> CSS部分: #canvasZone { width: 100%; height: 100%; text-align: center; padding-top: 2

hdu 5412 CRB and Queries(线段树套笛卡尔树 - 动态区间第k大)

题目链接:hdu 5412 CRB and Queries 首先对所有出现过的值排序,建立线段树,每个线段树的节点是一棵笛卡尔树,笛卡尔树记录区间下标值. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; #define lson(x) (x<<1) #define rson(x) ((x<<

笛卡尔树cartesian tree

笛卡尔树cartesian tree 笛卡尔树是一种特定的二叉树数据结构,可由数列构造,在范围最值查询.范围top k查询(range top k queries)等问题上有广泛应用.它具有堆的有序性,中序遍历可以输出原数列.笛卡尔树结构由Vuillmin(1980)[1]在解决范围搜索的几何数据结构问题时提出.从数列中构造一棵笛卡尔树可以线性时间完成,需要采用基于栈的算法来找到在该数列中的所有最近小数. 定义 无相同元素的数列构造出的笛卡尔树具有下列性质: 结点一一对应于数列元素.即数列中的每

POJ-2201-Cartesian Tree(笛卡尔树)

Description Let us consider a special type of a binary search tree, called a cartesian tree. Recall that a binary search tree is a rooted ordered binary tree, such that for its every node x the following condition is satisfied: each node in its left

[COGS 2421] [HZOI 2016] 简单的Treap 笛卡尔树

笛卡尔树就是你给两维限制,一维堆R,一维二叉搜索树K,平地拔起一棵Treap,最广范的应用:用LCA求区间最值,建Treap,还有个什么范围top k我表示并不会查都查不到.它最妙最高的地方在于用栈来建树:我们可以先排序K然后一个个插入,那么我们都是最右端,横容易被卡,那么我们不从上到下,我们从下到上,用栈维护,那就把时间复杂度从O(n^2)降到O(n),具体过程见下图从图一到图二就是这么一个过程,我们在把K为13的点插入时要找到一个合适的位置,上比他大,下比他小(假设大根堆) 下面见代码 #i

POJ 2559 Largest Rectangle in a Histogram ——笛卡尔树

[题目分析] 本来是单调栈的题目,用笛卡尔树可以快速的水过去. 把每一个矩阵看成一个二元组(出现的顺序,高度). 然后建造笛卡尔树. 神奇的发现,每一个节点的高度*该子树的大小,就是这一块最大的子矩阵的可能解. 用二元组的第一个下标来限制,使它们在一块儿,然后堆的性质又限制了宽度以及高度. 计算,取最值即可. [代码] #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath&g

CROSS JOIN连接用于生成两张表的笛卡尔集

将两张表的情况全部列举出来 结果表: 列= 原表列数相加 行= 原表行数相乘 CROSS JOIN连接用于生成两张表的笛卡尔集. 在sql中cross join的使用: 1.返回的记录数为两个表的记录数乘积. 2.将A表的所有行分别与B表的所有行进行连接. 例如: tableA r1 r2 A B C D tableB r3 r4 1 2 3 4 select * from tableA cross join tableB; return: r1 r2 r3 r4 r1 r2 1 2 r1 r2

POJ-1785-Binary Search Heap Construction(笛卡尔树)

Description Read the statement of problem G for the definitions concerning trees. In the following we define the basic terminology of heaps. A heap is a tree whose internal nodes have each assigned a priority (a number) such that the priority of each