data java

Java Python 159.235 2023 S02 — Assignment 2
This assignment covers the topics: coordinates, transformations, 3d modelling, and visible
surfaces.
Wireframe Data Viewer
Write a Java program that renders a 3 dimensional triangle wireframe surface data model
and allows one to rotate and scale the model so that it can be viewed from any direction.
This could be thought of as a simple CAD program.
Your application needs to be set up so that the ffgures rotate as the sliders are adjusting,
they uniformly resize after clicking the appropriate button, and they get re-drawn when
toggling between anti-aliasing on/off.
Use the simple viewing model where the “eye” point is on the positive z-axis looking down
and the ffgures are drawn by orthographically projecting onto the xy-plane.
You will need to decide how to transform the vertex coordinates in the wireframe data for
the given rotations and scalings. You can then draw each triangle on the Graphics2D canvas
with the transformed vertex positions.
Your rendered wireframe ffgures should appear “solid”—the wireframe outlines should be
clearly visible. You need to implement some procedure to remove hidden surfaces. You
should at least implement the back face culling method. You should ffnd that this will
remove most hidden surfaces—but not all of them. Top marks will be earned by those
programs that are able to remove all hidden surfaces.
Sample triangle mesh wireframe data ffles are provided on Stream. You program should
work smoothly with all of them.
You do not need to implement the 2D viewport clipping procedures described in the lectures.
You can let the Java AWT handle all that.
You do not need to apply any lighting or shading to the surfaces—this will be dealt with
later on in the course.
Completing the assignment
A set of startup Java source ffles are on Stream that will function as skeleton code for
the assignment. Load these into a new IntelliJ project and start up Main.java—this is the
“controller” part of your project. This features a number of JPanels with slider and button
widgets. Familiarize yourself with the various components in the project folder.
To complete the assignment, provide implementations for the other components. When
doing so you will need to make small adjustments to Main.java—mostly in the event handler
method. Complete as follows:
1. The Wireframe.java ffle contains a class that holds all data for a given triangle mesh
ffgure. Decide what data needs to be stored there. Provide an implementation inWireframeDataIO.java to read from a wireframe .tri ffle and create a new instance of
Wireframe
[2 mark data、java s]
2. Complete the implementation of the rotation matrix utilities in Transform3d.java. The
purpose of this utility is to be able to readily generate a full rotation matrix given
rotation angles in each of the 3 planes.
[2 marks]
3. Make appropriate modiffcation to the Wireframe class so that these rotations, as well
as scaling, can be applied to the triangle mesh data.
[3 marks]
4. Provide an implementation in WireframeDrawer.java to draw the triangles on a JPanel
using the transformed vertex positions. This needs to happen directly in response to
adjusting the sliders and clicking the buttons.
[3 marks]
5. Provide an implementation of back face culling. You will need to decide the appropriate
places in your project to make the modiffcations.
[4 marks]
6. Further modify your project to implement the Painter’s Algorithm. Here you will need
to decide on a suitable approach for deffning the “depth” of your triangles and how to
sort them.
[4 marks]
7. Implement the action following the anti-aliasing buttons, so that the lines will be
drawn with anti-aliasing either on or off. Decide how this will be actioned in the Main
controller. For this part is enough to use the anti-aliasing tools built-in with the Java
AWT.
[2 marks]
Due date: 2024 September 20, 11:55pm.
Please submit via the submission link on Stream.
Total 20 marks (20% of your ffnal grade).Coding hints
• To read and parse a text ffle (as in the wireframe data ffles), the JDK supplied
java.util.Scanner class is a useful utility. Create a Scanner object and use the .nextLine()
method to step through the ffle line-by-line. This method will give you a line in a ffle as
a String. Note: to use this utility, you will need to handle the FileNotFoundException.
• There are situations where you will need to split a String into sub-strings according to
some delimiter (e.g. space, tab, comma, . . .). Use the java.util.StringTokenizer for
this.
• To convert a String to a numeric value, use Integer.parseInt() or Double.parseDouble().
• It is suggested that you draw each triangle using something like:
// xDraw and yDraw are s i ze 3 arrays giving the t r iangle vertex positions
Polygon aTriangle = new Polygon(xDraw, yDraw, 3);
// . . . assign values to aTriangle . . .
// The implementation de tail s wil l depend upon how you have
// designed your program
g2.setColor(Color.gray);
g2.fill(aTriangle); // Colour in the t r iangle surface
g2.setColor(Color.black);
g2.draw(aTriangle); // Draw the t r iangle outline
Note that xDraw and yDraw are integer arrays         

### 回答1: multipart/form-data是一种HTTP POST请求的编码类型,用于在Web应用程序中上传文件和表单数据。在Java中,可以使用Java Servlet API或Apache HttpClient等库来处理multipart/form-data请求。通常,multipart/form-data请求会将数据分成多个部分,每个部分都有自己的Content-Type和Content-Disposition头信息,以及数据本身。在Java中,可以使用Part接口来表示每个部分,并使用request.getParts()方法来获取所有部分的列表。然后,可以使用Part的方法来获取每个部分的内容和元数据。 ### 回答2: multipart/form-data是一种HTTP POST请求中常用的数据传输格式,它是用来在HTML表单中上传文件或二进制数据的一种方式。Java语言在处理multipart/form-data时,需要使用一些特定的API来解析和处理请求。在下面的回答中,我将介绍Java中处理multipart/form-data的相关API。 首先,在Java中处理multipart/form-data请求时,需要使用Servlet API中的Part接口和相关类。Part接口表示HTTP POST请求中的一个组件,可以是一个HTML表单的一个字段或一个上传的文件。可以通过HttpServletRequest的getPart()或getParts()方法获取请求中的Part对象。 另外,Java Servlet API中还定义了一个名为javax.servlet.http.Part的标准接口,该接口定义了一些方法,可以获取Part对象的内容类型、大小、文件名等信息。以及可以通过Part.write()方法将Part对象的数据写入输出流中,也就是将用户上传的文件保存到服务器磁盘上。 另外,为了更方便地处理请求中的部件,Java Servlet API还提供了一个名为javax.servlet.http.multipart.MultipartHttpServletRequest的类。MultipartHttpServletRequest类继承自HttpServletRequest接口,它可以通过HttpServletRequest的getInputStream()方法获取请求的输入流,然后使用第三方库如Apache Commons FileUpload在输入流中读取请求的各个部件。这个类可以使处理multipart/form-data请求更加简单和可读性更好。使用MultipartHttpServletRequest类启用multipart/form-data请求处理器时,开发人员需要在web.xml文件中设置multipart-config元素来指定部件上限大小和保存上传文件的位置。 总而言之,使用Java语言处理multipart/form-data请求时,需要使用Servlet API中的Part接口、MultipartHttpServletRequest类以及第三方文件上传库,通过这些API可以将用户上传的数据或文件捕获并处理。这些API的正确使用可以使开发人员在处理multipart/form-data请求时避免一些常见的错误和异常。 ### 回答3: multipart/form-data是HTTP协议中一种常用的编码格式,用于在web应用程序中上传文件或提交表单数据。multipart/form-data格式可以传输二进制流数据,而其他编码格式不能够充分满足web应用程序对这种需求的要求。multipart/form-data格式最常见的应用场景就是通过HTTP POST方法上传文件。 在Java中,可以通过使用Apache的commons-fileupload和commons-io库来实现multipart/form-data格式的文件上传。首先,应该在项目中导入这两个库的jar包,并在代码中使用相关类。 文件上传时的步骤如下: 1. 创建一个DiskFileItemFactory对象,并设置缓冲区和限制大小(可选) 2. 创建一个ServletFileUpload对象,并使用DiskFileItemFactory进行初始化 3. 使用ServletFileUpload对象解析request对象,并返回一个List对象 4. 遍历List对象中的FileItem对象,分别处理每一个表单字段或上传的文件数据 5. 对于上传的文件数据,可以将其保存到本地磁盘或进行其他操作 以下是一个示例代码: //创建DiskFileItemFactory DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 1024 * 10); factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); //创建ServletFileUpload ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(1024 * 1024 * 50); //解析request List<FileItem> items = upload.parseRequest(request); //遍历List for (FileItem item : items) { if (item.isFormField()) { //处理表单字段 String fieldName = item.getFieldName(); String fieldValue = item.getString(); } else { //处理上传的文件 String fileName = item.getName(); String contentType = item.getContentType(); InputStream fileStream = item.getInputStream(); //保存文件到本地磁盘或进行其他操作 } } multipart/form-data格式的文件上传是web开发中常见的需求,通过Java提供的相关工具库可以很轻松地实现这个功能。需要注意的是,上传文件时应该对文件大小进行限制,并对上传的文件数据进行正确的处理和存储,以确保应用程序的稳定性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值