已经知道一个直线方程 y=ax+b,a=2,b=3;在坐标轴内画出这个方程的直线。
要求:坐标轴的范围是(300,300),画全这个范围内的直线,但不能超出这个范围。该如何画呢~~~~2点能够确定一条直线,可是如何才能让这个直线在(300,300)范围内画全且不超出呢? 望指教
要求:坐标轴的范围是(300,300),画全这个范围内的直线,但不能超出这个范围。该如何画呢~~~~2点能够确定一条直线,可是如何才能让这个直线在(300,300)范围内画全且不超出呢? 望指教
解决方案 »
- 计算星期几的方法?
- 一道java面试题,求解!!
- 多线程join有点不明白,求教
- 感觉线程很难懂,看了thinking in java ,有很长时间了,最后还是对线程不怎么理解,尤其是对于一些线程运行的结果,很多都出乎意料
- java如何调用delphi开发的Dll文件
- 各位请帮忙!java编译的问题!!!
- 帮帮忙给看看
- java里怎么实现统计报表功能?100分给你拿
- 怎样用文JDBC for sqlserver访问SQLSERVER 数据库请大侠给出一个完整的程序代码
- 给出一个例子 --- 类的实例可以获取同一个类的另外一个实例的私有成员。
- java源文件存为utf-8格式
- java如何连接db2
把你的坐标映射到绘图区,找两点连就行了。yanhan0615(炮炮)说的是画直线的方法,JAVA提供函数了,没必要自己去做。
另:他只考虑斜率小于1的情况,大于1时要从y轴循环
就是跟maquan('ma:kju)一个意思,但我总觉得这个方法是不是“笨”了一点,呵呵,见笑了。laziogo() 说的“yanhan0615(炮炮)说的是画直线的方法,JAVA提供函数了” 是哪个函数哦
JAVA的graphics提供两点一线的绘制方法了啊。楼主的问题其实是一个解析几何问题,就是分别求直线y=2x+3与四条直线x=0, y=0, x=300, y=300的交点,如果与x=0和y=0的交点有一点的x和y均落在区间[0,300]内,则认为该点是要画直线的起点,同样
,如果与x=300和y=300的交点有一点的x和y均落在区间[0,300]内,则认为该点是要画直线的终点。解方程得到起点坐标应为(0,5), 终点坐标为(300, 148.5),用Graphics.drawLine(0, 5, 300, 148.5)即可画得此线。
public class Practice {
Practice(){
for(int i=0;i<301;i++){
for(int j=0;j<301;j++){
int a=2*i+3;
if(a==j){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println("");
}
}
public static void main(String args[]){
new Practice();
}
}
//a=2,b=3;
y在[0,300],因为y=ax+b 所以 x在[-b/a,(300-b)/a] ,假设a>0,小于0调换一下
因为x也在[0,300],跟[-b/a,(300-b)/a]=[-1.5,148.5] 交集是[0,148.5]
所以两个端点是(0,3)和(148.5,300)
Graphics.drawLine(0, 3, 148.5 ,300)
public class Practice {
Practice(){
for(int i=0;i<31;i++){
for(int j=31;j>0;j--){
int a=2*i+3;
if(a==j){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println("");
}
}
public static void main(String args[]){
new Practice();
}
}
import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;public class MyPanel extends JPanel {
public MyPanel() {
this.setSize(400, 400);
} public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(new BasicStroke(1.5f));
g2.translate(50, 50);
g2.draw(new Rectangle2D.Double(rect[0], rect[1], rect[2], rect[3]));
double a = -2, b = 5;
for (b = -400; b < 1000; b += 20) {
double[] twox = getBewInter(new double[] { rect[0], rect[0] + rect[2] }, new double[] { (rect[1] - b) / a, (rect[1] + rect[3] - b) / a });
if (twox != null)
g2.draw(new Line2D.Double(twox[0], a * twox[0] + b, twox[1], a * twox[1] + b));
}
} double[] getBewInter(double[] one, double two[]) {
double[] f = { Math.min(one[0], one[1]), Math.max(one[0], one[1]) };
double[] s = { Math.min(two[0], two[1]), Math.max(two[0], two[1]) };
if (s[0] > f[1] || s[1] < f[0])
return null;
double[] ret = { (f[0] <= s[0] && s[0] <= f[1]) ? s[0] : f[0], (f[0] <= s[1] && s[1] <= f[1]) ? s[1] : f[1] };
return ret;
} double rect[] = { 0, 0, 300, 300 };
}
图像剪切好象用得着这类算法,不过过于复杂了,最好是采用覆盖的方式,把300*300的外边用底色覆盖来得方便。
如果用:求直线y=2x+3与四条直线x=0, y=0, x=300, y=300的交点,如果与x=0和y=0的交点有一点的x和y均落在区间[0,300]内,则认为该点是要画直线的起点,同样
,如果与x=300和y=300的交点有一点的x和y均落在区间[0,300]内,则认为该点是要画直线的终点。
这个方法的话是否没有考虑 如果与x=0和y=0的交点都没有落在区间[0,300]内的情况呢?