这里为简化计算, 形状并不规则
设置五角星五个点分别为
top
left
right
bottom_left
bottom_right
假设 left -> right 长度为length
left -> top 横坐标差为 length/2 坐标表差为 length / 2
到底部长度也为 length
1. turtle 绘制
python 代码 使用 turtle 绘制 (turtle的坐标系原点在窗口中心,
x轴正方向向右 y轴正方向向上)
import turtle
import math
turtle.color('red')
def get_points(x, y, length):
return ((x, y), (x + length, y), (x, y - length), (x + length / 2, y + length / 2), (x + length, y - length))
def main():
for p in get_points(0, 0, 100):
turtle.goto(p[0], p[1])
turtle.goto(0, 0)
main()
turtle.done()
可以绘制出下面的图形
2. easyX绘制
C++ 代码 使用 easyX 绘制 (easyX的坐标轴原点在窗口的左上方
x轴正方向向右 y轴正方向向下)
#include<iostream>
#include<graphics.h>
#include<vector>
namespace zsl {
class Point {
private:
int x; int y;
public:
Point(int x, int y) {
this->x = x;
this->y = y;
}
Point() {}
int getX() {
return this->x;
}
int getY() {
return this->y;
}
Point to_offset(int x, int y) {
return Point(this->x + x, this->y + y);
}
};
}
std::vector<zsl::Point> getPoints(zsl::Point p, int length) {
std::vector<zsl::Point> pointList = { p,
p.to_offset(length, 0),
p.to_offset(0, length),
p.to_offset(length / 2, - length / 2),
p.to_offset(length, length),
p
};
return pointList;
}
int main() {
initgraph(600, 600);
setlinecolor(RED);
zsl::Point start = zsl::Point(200, 200);
std::vector<zsl::Point> points = getPoints(start, 100);
for (int i = 1; i < points.size(); i++) {
zsl::Point last = points[i - 1];
zsl::Point curr = points[i];
line(last.getX(), last.getY(), curr.getX(), curr.getY());
}
int a;
std::cin >> a;
closegraph();
return 0;
}
3. swing 绘制
java 代码 使用 swing (swing的坐标轴原点在左上方
x轴正方向向右 y轴正方向向下)
package com.demo.draws;
import javax.swing.*;
import java.awt.*;
import java.util.Arrays;
public class Draw extends JFrame {
public class Plot extends JPanel {
private java.util.List<java.util.List<Integer>> points;
public Plot(java.util.List<java.util.List<Integer>> points) {
this.points = points;
}
public void paint(Graphics graphics) {
super.paint(graphics);
Graphics2D graphics2D = (Graphics2D) graphics;
graphics2D.setColor(Color.RED);
for (int i = 1; i < points.size(); i ++) {
graphics2D.drawLine(points.get(i - 1).get(0), points.get(i -1).get(1),
points.get(i).get(0), points.get(i).get(1));
}
BasicStroke basicStroke = new BasicStroke(10.1f,BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL);
graphics2D.setStroke(basicStroke);
}
}
public java.util.List<java.util.List<Integer>> getPoints(int x, int y, int length) {
return Arrays.asList(
Arrays.asList(x, y),
Arrays.asList(x + length, y),
Arrays.asList(x, y + length),
Arrays.asList(x + length / 2, y - length / 2),
Arrays.asList(x + length, y + length),
Arrays.asList(x, y)
);
}
public Draw() {
super();
init();
}
public void init() {
this.setSize(600, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(new Plot(getPoints(200, 200, 100)));
this.setTitle("绘图");
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main(String[] args) {
new Draw();
}
}