余 弦 曲 线

news2024/10/26 23:27:13
1.问题描述

在屏幕上画出余弦函数cos(x)曲线,如图1.6所示。

                                                图1.6  余弦函数cos(x)曲线

2.问题分析

连续的曲线是由点组成的,点与点之间距离比较近,看上去就是曲线了,画图的关键是画出每个点。Java提供了三角函数方法,直接调用cos()方法就可以根据x坐标计算出y坐标.需要注意的是,cos()方法输入的参数是弧度值,要进行坐标转换,同样,得到的结果也要进行转换处理。从图1。6中可以看出,这条余弦曲线有两个周期,我们可以把x坐标控制在0~720.

(1)确定程序框架

从图1.6中,我们可以发现,整个图形包括x轴、y轴及余弦曲线。控制台不方便输出图形,这里以Applet形式输出。这样我们就可以写出程序框架了,代码如下:

public class Ch1_3 extends  Applet

int x,y;

public void start() //当一个Applet被系统调用时,系统会自动调用   start()方法

{

Graphics g=getGraphics(); //画画之前,必须先取得画笔

//画x轴

//画y轴

//画cos(x)曲线

}

}

(2)画x轴

为了画出图1.6所示效果,我们可以把坐标原点设定为(360,200),x轴就是从左到右的很多点组成,通过循环语句很容易实现,代码如下:

for(x=0;x〈=750;x+=1)

g.drawString("·",x,200); //画x轴

}

细心的读者会发现,x轴上还有个箭头,这个是如何实现的呢,其实很简单,是由两条线段交汇而成。为方便起见,两条线段都与x轴成45°角,很容易得到表达式的方程:y=x550,y=950x.代码如下:

for(x=740;x〈=750;x+=1)

{

g.drawString(”·”,x,x-550); //x轴上方斜线

g.drawString("·",x,950—x); //x轴下方斜线

}

(3)画y轴

参考上面x轴的绘制,很容易画出y轴,代码如下:

//y轴

for(y=0;x〈=385;y+=1)

{

g.drawString(”·”,360,y); //画y轴

//y轴箭头

for(x=360;x〈=370;x+=1)

g.drawString(”·”,x—10,375—x);

g.drawString("·",x,x-355);

}

(4)画cox(x)曲线

图形的主体是cox(x)曲线,从图1.6中可以看出,这条余弦曲线有两个周期,我们可以把x坐标控制在0~720。cox(x)返回的结果小于1,为了看到图1.6效果,必须进行放大处理,这里放大了80倍,同时把图形向下平移了200个像素。代码如下:

//两个周期,即4Л

for(x=0;x〈=720;x+=1)

{

a=Math。cos(x*Math. PI/180);

y=(int)(200+80a); //放大80倍并向下平移200个像素

g.drawString("·",x,y);

}

(5)完整程序

现在我们就需要把刚才的程序进行组合,构成我们的完整程序:

import java.applet。

import java。awt。*

public class Ch1_3_2 extends Applet

int x,y;

public void start()

//画画之前,必须先取得画笔

Graphics g=getGraphics();

         //画x轴、y轴

for(x=0;x〈=750;x+=1)

{

g。drawString(”·",x,200);

if(x<=385) g.drawString(”·”,360,x);

}

g.drawString("Y",330,20);

         //画y轴箭头

for(x=360;x〈=370;x+=1)

g。drawString(”·",x-10,375—x);

g.drawString(”·",x,x-355);

}

         //画x轴箭头

g.drawString("X",735,230);

for(x=740;x〈=750;x+=1)

g.drawString("·",x,x-550);

g。drawString("·”,x,950—x);

         //画cox()曲线

for(x=0;x<=720;x+=1)

{

double a=Math。cos(x*Math. PI/180+Math.PI);

y=(int)(200+80a); //放大80倍并向下平移200个像素

g。drawString("·",x,y);

}

}

Ch1_3.html网页代码如下:

<html>

<head〉<title>余弦曲线测试</title>〈/head〉

〈/body>

<p〉

<!——调用Ch1_3字节码文件 ——〉

<applet code=Ch1_3。class

<!-—设置窗口大小 ——〉

width=900

height=600>

</applet〉

</body〉

</html>  

(6)运行结果

把Ch1_3.java文件编译后的Ch1_3。class文件放到Ch1_3。html网页同一目录下,直接用IE浏览器打开Ch1_3。html,运行程序,结果如图1.6所示。

3.扩展训练

前面介绍的余弦曲线的绘制,我们看到的是一个完整的静态图形,能否动态地展现绘制的过程?答案是肯定的,我们可以采用线程的方式来实现,参考代码如下:

import java.applet。Applet;

import java.awt.Color;

import java.awt。Graphics;

public class donghua_cos extends Applet implements Runnable
//通过实现Runnable接口实现线程操作

{

int x,y;

double a;

int xpos=0;

Thread runner;

boolean painted=false;

public void init() //Applet创建即启动执行,坐标初始化

// TODO Auto-generated method stub

Graphics g=getGraphics(); //画画之前,必须先取得画笔

for(x=0;x〈=750;x+=1) //画x轴

{

  g。drawString(”·”,x,200);

  if(x〈=385) g.drawString(”·”,360,x);

  

g.drawString("Y",330,20); //画y轴

for(x=360;x〈=370;x+=1) //画y轴箭头

{

  g。drawString(”·”,x—10,375—x);

  g。drawString("·",x,x-355);

}

g。drawString("X",735,230);

for(x=740;x〈=750;x+=1) //画x轴箭头

  g.drawString(”·",x,x-550);

  g.drawString("·”,x,950-x);

}

public void start() //Applet创建后自启动方法

{

// TODO Auto-generated method stub

if(runner==null){

runner=new Thread(this); //通过Thread类来启动Runnable

runner。start(); //线程启动

}

public void stop() //Applet生命周期结束后自启动方法

{

// TODO Auto—generated method stub

if(runner!=null){

runner=null; //结束线程

public void run() //线程运行方法

{

// TODO Auto—generated method stub

while(true){

for(xpos=0;xpos<900—90;xpos+=3) //循环设置曲线x轴坐标边界

repaint(); //调用paint()方法

try{

Thread.sleep(100); //线程休息100毫秒

}catch(InterruptedException e){}

if(painted)

painted=false;

}

}

}

public void paint(Graphics g) //画图方法

for(x=0;x<=xpos;x+=1) //循环画曲线

  a=Math。cos(xMath. PI/180+Math。PI);

  y=(int)(200+80a); //放大80倍并向下平移200个像素

  g.drawString(”·”,x,y);

}

painted=true;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app 如何全局设置,获取app.vue里面的值

在globalData里设置一个值 通过下面方法修改 this.$options.globalData.$versonStatus status 在页面中通过getApp()获取 getApp().globalData.$versonStatus

<<迷雾>> 第11章 全自动加法计算机(3)--存储器示例 示例电路

info::操作说明 将一组比特单元扩展为多组的结果, 操作原理类似 注: 一次只能操作一组, 此处需进一步引入地址译码器才能具体进行操作, 见后面的例子, 此处仅展示结构原理 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdm…

C++模板初阶速成

温馨提示&#xff1a;本篇文章依旧是c速成系列的文章&#xff0c;但和以往有所不同的是&#xff0c;本篇文章带大家简单了解并能够学会使用模板 泛型编程 概念&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。 什么是复用&#xff1f; 简单来说就是…

分组相关 -- EoO原理

EoO (Ethernet over OTN) 是将以太网信号处理后&#xff0c;经过封装、映射后上OTN系统&#xff0c;通过WDM通道来传送的技术。传统的OTN承载ETH专线&#xff0c;不支持限速&汇聚等场景。引入EoO技术后&#xff0c;支持LAG、QoS、OAM等L2层的功能特性&#xff0c;实现端口限…

RBTree(红黑树)的介绍和实现

欢迎来到杀马特的主页&#xff1a;羑悻的小杀马特.-CSDN博客 目录 ​编辑 一红黑树介绍&#xff1a; 1.1红黑树概念&#xff1a; 1.2红黑树遵循的原则&#xff1a; 1.3红黑树效率分析&#xff1a; 二.红黑树的实现&#xff1a; 2.1红黑树结构&#xff1a; 2.2红黑树节点…

TMGM:下周全球市场分析

本周&#xff0c;美国股市表现强劲&#xff0c;标普500指数和道琼斯工业平均指数均刷新了历史最高记录。这一涨势得到了美联储公开市场委员会&#xff08;FOMC&#xff09;会议纪要的支撑&#xff0c;纪要显示大部分官员都支持9月份实施重大的50个基点降息。 在澳大利亚&#…

宝安网站建设中的响应式设计

宝安网站建设中的响应式设计 在数字化时代&#xff0c;网站已成为企业展示形象、吸引客户的重要平台。而在宝安地区&#xff0c;随着互联网的发展&#xff0c;越来越多的企业意识到响应式设计的重要性。响应式设计不仅能够提升用户体验&#xff0c;还能为企业带来更大的市场竞争…

.NET 一款通过DCOM实现系统提权的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

2024年恩施职称评前公示

此次公示共有422人&#xff0c;初级职称、中级职称、馆员、畜牧师、助理馆员、三级演员、农艺师等均在一起进行评审前的公示。 根据恩施州职称改革工作领导小组办公室《关于报送2024年度恩施州中初级专业技术职务评审材料的通知》&#xff08;恩施州职改办〔2024〕14号&#xf…

04 什么是线性表

什么是线性表 一、为什么需要线性表 例如&#xff1a; ​ 在程序中保存指定班级的所有的学生信息&#xff08;暂时只需要处理姓名、年龄&#xff09;&#xff0c;该班级最多可容纳30人&#xff0c;且可进行数量上的增减。 业务功能&#xff1a; ​ 1&#xff09;这个项目中…

【分布式架构】分布式锁Redission

一、流程图 二、lua脚本实现原理 由setnxexpire实现 setnx&#xff1a;判断key是否存在&#xff0c;如果不存在&#xff0c;则获取锁 setnx的数据结构&#xff1a;<key,<key1,value>> key&#xff1a;业务声明的key key1&#xff1a;线程id value&#xff1a;次数…

css 翻页效果

有一个项目&#xff0c;页面切换的时候要翻页效果。 所以有一个简单的demo&#xff0c;提供给大家学习 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdev…

Golang | Leetcode Golang题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; func findComplement(num int) int {highBit : 0for i : 1; i < 30; i {if num < 1<<i {break}highBit i}mask : 1<<(highBit1) - 1return num ^ mask }

空间计算:现实与数字世界的无缝融合

随着增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;、物联网&#xff08;IoT&#xff09;和人工智能&#xff08;AI&#xff09;的不断进步&#xff0c;空间计算&#xff08;Spatial Computing&#xff09;作为一种新兴技术&#xff0c;正在成为人们…

IDEA Sping Boot 多配置文件application Maven动态切换

新建application-dev.yml与application-prod.yml pom.xml文件下添加profiles等 让idea识别出配置文件 <profiles><profile><id>dev</id><properties><!-- 环境标识&#xff0c;需要与配置文件的名称相对应 --><profiles.active>dev&…

安装和配置k8s可视化UI界面dashboard-1.20.6

安装和配置k8s可视化UI界面dashboard-1.20.6 1.环境规划2.初始化服务器1&#xff09;配置主机名2&#xff09;设置IP为静态IP3&#xff09;关闭selinux4&#xff09;配置主机hosts文件5&#xff09;配置服务器之间免密登录6&#xff09;关闭交换分区swap&#xff0c;提升性能7&…

2013年国赛高教杯数学建模A题车道被占用对城市道路通行能力的影响解题全过程文档及程序

2013年国赛高教杯数学建模 A题 车道被占用对城市道路通行能力的影响 车道被占用是指因交通事故、路边停车、占道施工等因素&#xff0c;导致车道或道路横断面通行能力在单位时间内降低的现象。由于城市道路具有交通流密度大、连续性强等特点&#xff0c;一条车道被占用&#x…

ubuntu22.04 ROS2 - 安装

参考链接:Ubuntu 22.04 LTS安装ROS2 (ros-humble-desktop)-CSDN博客 1、安装测试 ros2 run demo_nodes_cpp listener再开一个终端ros2 run demo_nodes_cpp listener2、小海龟模拟器 ros2 run turtlesim turtlesim_noderos2 run turtlesim turtle_teleop_key两个终端分别执行…

树莓派应用--AI项目实战篇来啦-5.OpenCV绘画函数的使用

1. 介绍 OpenCV作为一款功能强大的计算机视觉库&#xff0c;被广泛地应用于图像处理和计算机视觉领域。 除了在机器视觉和人工智能领域有者广泛的应用&#xff0c;OpenCV 还能够媲美艺术家的创造力&#xff0c;通过其强大的绘图函数&#xff0c;绘制出令人叹为观止的艺术画作。…

【ICESat-2(Ice, Cloud and land Elevation Satellite-2)简介】

ICESat-2&#xff08;Ice, Cloud and land Elevation Satellite-2&#xff09;&#xff0c;即冰、云和陆地高程卫星2号&#xff0c;是美国国家航空航天局&#xff08;NASA&#xff09;的一项重要卫星任务&#xff0c;旨在测量地球冰盖、云层以及陆地的高度变化。以下是对ICESat…