笛卡尔-心形图 源代码 分析

lqshn 2014-04-30 01:22:15

java的代码如下,谁能帮我用C#改写一下啊,谢谢,感激不尽
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
* 笛卡尔情书的秘密r=a(1-sinθ)
*
* @author crazykay
* @see 《趣味编程100例》心形图
*/
public class JavaFXApplicationHeart extends Application {

@Override
public void start(Stage primaryStage) {
int width, height;
Canvas canvas = new Canvas(350, 350);
width = (int) canvas.getWidth();
height = (int) canvas.getHeight();

GraphicsContext gc = canvas.getGraphicsContext2D();
double x, y, r;
for (int i = 0; i <= 90; i++) {
for (int j = 0; j <= 90; j++) {
//转换为直角坐标系,设置偏移量,使图像居中
r = Math.PI / 45 * i * (1 - Math.sin(Math.PI / 45 * j)) * 19;
x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i) + width / 2;
y = -r * Math.sin(Math.PI / 45 * j) + height / 4;

gc.setFill(Color.RED);
gc.fillOval(x, y, 2, 2);
gc.fillOval(x, y, 1, 1);
}
}


StackPane root = new StackPane();
root.getChildren().add(canvas);

Scene scene = new Scene(root, Color.BLACK);

primaryStage.setTitle("r=a(1-sinθ)");
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}
源地址http://www.oschina.net/code/snippet_104514_18581
...全文
1383 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Y_110110 2014-12-26
  • 打赏
  • 举报
回复
有没有高手可以做成C++/C呢?
royal1 2014-12-03
  • 打赏
  • 举报
回复
运行效果很赞!
kxyzjm62 2014-05-01
  • 打赏
  • 举报
回复
zylsky 2014-04-30
  • 打赏
  • 举报
回复
引用 2 楼 zijiang001 的回复:
private void Form4_Load(object sender, EventArgs e)
        {
            this.BackColor = Color.Black;
            this.Size = new Size(400, 400);
            Panel panel = new Panel();
            panel.Size = new Size(350, 350);
            panel.Paint += new PaintEventHandler(panel_Paint);
            panel.Location = new Point((this.ClientRectangle.Width - panel.Width) / 2, (this.ClientRectangle.Height - panel.Height) / 2);
            this.Controls.Add(panel);
        }



        void panel_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            double x, y, r;
            int w = e.ClipRectangle.Width;
            int h = e.ClipRectangle.Height;
            for (int i = 0; i <= 90; i++)
            {
                for (int j = 0; j <= 90; j++)
                {
                    //转换为直角坐标系,设置偏移量,使图像居中
                    r = Math.PI / 45 * i * (1 - Math.Sin(Math.PI / 45 * j)) * 19;
                    x = r * Math.Cos(Math.PI / 45 * j) * Math.Sin(Math.PI / 45 * i) + w / 2;
                    y = -r * Math.Sin(Math.PI / 45 * j) + h / 4;
                    using (Brush brush = new SolidBrush(Color.Red))
                    {
                        e.Graphics.FillEllipse(brush, (float)x, (float)y, 2f, 2f);
                        e.Graphics.FillEllipse(brush, (float)x, (float)y, 1f, 1f);
                    }
                }
            }
        }
高手.
zijiang001 2014-04-30
  • 打赏
  • 举报
回复
用 Thread
lqshn 2014-04-30
  • 打赏
  • 举报
回复
引用 2 楼 zijiang001 的回复:
private void Form4_Load(object sender, EventArgs e)
        {
            this.BackColor = Color.Black;
            this.Size = new Size(400, 400);
            Panel panel = new Panel();
            panel.Size = new Size(350, 350);
            panel.Paint += new PaintEventHandler(panel_Paint);
            panel.Location = new Point((this.ClientRectangle.Width - panel.Width) / 2, (this.ClientRectangle.Height - panel.Height) / 2);
            this.Controls.Add(panel);
        }



        void panel_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            double x, y, r;
            int w = e.ClipRectangle.Width;
            int h = e.ClipRectangle.Height;
            for (int i = 0; i <= 90; i++)
            {
                for (int j = 0; j <= 90; j++)
                {
                    //转换为直角坐标系,设置偏移量,使图像居中
                    r = Math.PI / 45 * i * (1 - Math.Sin(Math.PI / 45 * j)) * 19;
                    x = r * Math.Cos(Math.PI / 45 * j) * Math.Sin(Math.PI / 45 * i) + w / 2;
                    y = -r * Math.Sin(Math.PI / 45 * j) + h / 4;
                    using (Brush brush = new SolidBrush(Color.Red))
                    {
                        e.Graphics.FillEllipse(brush, (float)x, (float)y, 2f, 2f);
                        e.Graphics.FillEllipse(brush, (float)x, (float)y, 1f, 1f);
                    }
                }
            }
        }
请问可以调整运行时这个图像呈现的速率吗?比如说我想在1min才把这个图完全画完
zijiang001 2014-04-30
  • 打赏
  • 举报
回复
private void Form4_Load(object sender, EventArgs e)
        {
            this.BackColor = Color.Black;
            this.Size = new Size(400, 400);
            Panel panel = new Panel();
            panel.Size = new Size(350, 350);
            panel.Paint += new PaintEventHandler(panel_Paint);
            panel.Location = new Point((this.ClientRectangle.Width - panel.Width) / 2, (this.ClientRectangle.Height - panel.Height) / 2);
            this.Controls.Add(panel);
        }



        void panel_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            double x, y, r;
            int w = e.ClipRectangle.Width;
            int h = e.ClipRectangle.Height;
            for (int i = 0; i <= 90; i++)
            {
                for (int j = 0; j <= 90; j++)
                {
                    //转换为直角坐标系,设置偏移量,使图像居中
                    r = Math.PI / 45 * i * (1 - Math.Sin(Math.PI / 45 * j)) * 19;
                    x = r * Math.Cos(Math.PI / 45 * j) * Math.Sin(Math.PI / 45 * i) + w / 2;
                    y = -r * Math.Sin(Math.PI / 45 * j) + h / 4;
                    using (Brush brush = new SolidBrush(Color.Red))
                    {
                        e.Graphics.FillEllipse(brush, (float)x, (float)y, 2f, 2f);
                        e.Graphics.FillEllipse(brush, (float)x, (float)y, 1f, 1f);
                    }
                }
            }
        }
智商余额不足 2014-04-30
  • 打赏
  • 举报
回复
不错哦
本课程是PowerBI系列课程之DAX函数专题讲解,包含以下内容 1.  DAX函数基础知识什么是DAX函数数学函数:ABS、DIVIDE、MOD、RAND、ROUND、FIXED等日期和时间函数: CALENDAR、CALENDARAUTO、MONTH、YEAR、DATE、DT等信息函数:USERNAME、USERPRINCIPALNAME、HASONEFILTER、HASONEVALUE、ISFILTERED、ISCROSSFILTERED、ISINSCOPE、ISBLANK、SELECTEDMEASURE、SELECTEDMEASURENAME等逻辑函数:AND、OR、IF、IFERROR、SWITCH、TRUE、FALSE、COALESCE(官方文档含糊不清-结合实例)等关系函数:CROSSFILTER、RELATED、RELATEDTABLE等筛选器函数:FILTER、CALCULATE、ALL、ALLEXCEPT、ALLSELECTED、EARLIER、KEEPFILTERS、REMOVEFILTERS、SELECTEDVALUE、LOOKUPVALUE等父子函数:PATH、PATHCONTAINS、PATHITEM、PATHLENGTH等统计函数:AVERAGE、COUNT、MAX、MIN、SUM等迭代统计函数:AVERAGEX、COUNTX、MAXX、MINX、SUMX、RANKX等表函数: FILTERS 、ADDCOLUMNS、 SELECTCOLUMNS、 CROSSJOIN、 EXCEPT、 GENERATE、 GROUPBY、 SUMMARIZE、 SUMMARIZECOLUMNS、 TOPN、 TREATAS、 UNION、 VALUES、DISTINCT、DATATABLE、NATUALINNERJOIN、NATRUALLEFTOUTERJOIN等文本函数: EXACT、MID、 FIND、 LEN、 REPT、 LOWER、 UPPER、 UNICHAR等时间智能函数:DATEADD、DATESMTD、FIRSTDATE、LASTDATE、SAMEPERIODLASTYEAR等财务函数:2020.7之后发布的,和Excel中财务函数相似,网页和demo pbix简单介绍其他函数:BLANK、ERROR、IFERROR等 DAX函数初体验:Max、Sum、Divide、if、Values等值函数表函数以及表和列的概念DAX函数术语、语法、运算符DAX运算符和引擎中字母大小写问题DAX编程注释和快捷键DAX与Excel函数的共同点和区别(PPT)DAX、xmSQL与SQL表达式的区别(PPT)DAX函数的自学途径 2.  PowerBI中数据建模知识维度建模关系传递和交叉筛选器方向-理解表关系(1v1, 1vM, Mv1,MvM)两个方向上应用安全筛选器关闭关系自动检测新建计算列新建度量值新建计算表:辅助表(五种方式)、日历表数据类型讲解数据格式控制:%、$、千位分隔符、小数位、日期格式Format函数自定义数据格式Convert函数做数据类型转换解决中文数字单位 万 的显示问题Date和DT函数定义固定日期值显示和隐藏列DAX代码分析器阅读DAX表达式方法:从上至下、由内到外(注意Calculate的计算顺序)调试DAX表达式方法:分布输出或VAR输出3.  DAX函数原理 Vertipaq列式数据库原理理解度量值和计算列理解行上下文和筛选上下文:Calculate示意行上下文中使用VAR替代EARLIERVAR变量在定义时的上下文中计算VAR变量是采用惰性计算(使用时计算)理解扩展表和RELATED函数理解数据沿袭Lineage 4.  开始感知DAX函数的强大DAX函数实现特殊符号的使用DAX函数实现切片器默认当前月或天DAX函数使切片器默认代表无任何选择DAX函数使切片器仅显示有数据的选项DAX函数使切片器反向筛选和计算DAX函数使切片器之间取并集DAX函数使关系中多端的切片器筛选一端的切片器 DAX函数实现年月共同决定数据排序DAX函数实现动态表标题DAX函数实现动态表配色和标DAX函数实现动态纵坐标DAX函数实现动态横坐标5.  理解重点DAX函数重中之重FILTER 和 CALCULATE和CALCULATETABLE详解调节器REMOVEFILTERS和ALL、ALLEXCEPT函数调节器ALL、ALLSELECTED和ISINSCOPE占比分析调节器AllSELECTED和KEEPFILTERS的比较调节器USERELATIONSHIP激活关系调节器TREATAS动态建立关系调节器CROSSFILTER改变筛选器方向重点之ISFILTERED和ISCROSSFILTERED重点之HASONEVALUE和ISINSCOPE的区别重点之表函数SELECTEDCOLUMNS和ADDCOLUMNS重点之表函数NATUALINNERJOIN和NATRUALLEFTOUTERJOIN重点之表函数FILTERS和VALUES比较重点之VALUES和DISTINCT的区别重点之分组函数SUMMARIZECOLUMNS详解重点之函数LOOKUPVALUE vs RELATED vs VLOOKUP 重点之集合函数UNION、INTERSECT、EXCEPT重点之集合函数CROSSJOIN和GENERATE 笛卡尔积重点之值合并、列合并、表合并CONCATENATEX重点之BLANK行产生的原因和BLANK相关函数重点之COALESCE函数处理空重点之FIRSTNOBLANK和FIRSTNOBLANKVALUE函数重点之使用VAR变量表中的列重点之Error和IfError函数6.  实际案例-日期时间和时间智能相关关键点-日期表和事实表关联问题时间智能-同比环比分析时间智能-累计聚合、滚动聚合、移动平均时间智能-期初期末库存分析日期分析-计算任意所选月份的环比日期分析-周的同比环比和周聚合日期分析-指定月份的同比环比和季度环比日期分析-计算季末或季末月份的数据日期分析-趋势中根据最近月份取TopN日期分析-动态指定某个日期区间分析日期分析-动态任意区间段做数据对比日期分析-实现两个日期列的范围筛选日期分析-按工作日计算日期差日期分析-计算最近两次购买日期差日期分析-根据历史数据做销售预测日期时间函数和时间智能函数使用总结7.  实际案例-DAX函数进阶进阶-解决列排序对计算的影响进阶-实现切片器筛选之间的OR逻辑进阶-矩阵Matrix中高亮显示最大值最小值进阶-DAX列转行 vs 矩阵列转行和逆透视进阶-非日期类型的累计聚合进阶-排名逻辑的4种实现-RANKX详解进阶-分组内排名的实现和理解迭代函数进阶-TopN/BottomN和Others的实现进阶-TopN中实现动态指标进阶-TopN中实现N的动态进阶-分组内动态TopN和Others 进阶-商品折上折-迭代函数SUMX详解 进阶-分析客户购买行为进阶-找出无购买行为的客户进阶-客户购买商品关联度分析 进阶-新客户分析进阶-流失客户分析进阶-回流客户分析进阶-客户购买频次和区间分析进阶-RFM客户价值分析进阶-帕累托分析进阶-盈亏平衡分析报表性能优化思路(PPT)  

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧