ฉันกำลังเขียนโปรแกรมที่รับพิกัดจากผู้ใช้และวาดรูปทรงบางส่วนบนหน้าจอด้วยดาว(*)
เช่น สี่เหลี่ยมผืนผ้า เช่น สี่เหลี่ยมผืนผ้า = 100,150,50,50 เป็น x, y, ความกว้าง, ความสูง ฉันจะทำอย่างไร??
ฉันกำลังเขียนโปรแกรมที่รับพิกัดจากผู้ใช้และวาดรูปทรงบางส่วนบนหน้าจอด้วยดาว(*)
เช่น สี่เหลี่ยมผืนผ้า เช่น สี่เหลี่ยมผืนผ้า = 100,150,50,50 เป็น x, y, ความกว้าง, ความสูง ฉันจะทำอย่างไร??
ฉันคิดว่าบทช่วยสอนนี้มีประโยชน์มากสำหรับคุณ: http://download.oracle.com/javase/tutorial/2d/geometry/primitives.html
'การวาดภาพด้วยดาว' คืออะไร? หากเป็นโหมดข้อความที่มีแบบอักษรเว้นวรรค คุณจะต้องพิมพ์เป็นรูปดาวเป็นเส้นแนวนอน เพื่อคำนวณความยาวที่เหมาะสม สำหรับสี่เหลี่ยมนี่เป็นเรื่องง่าย สำหรับสามเหลี่ยม ง่ายน้อยกว่านิดหน่อย ห้าเหลี่ยมเป็นเพียงการรวมกันของสี่เหลี่ยมกับสามเหลี่ยมบางส่วน ดู อัลกอริทึม Bresenham เพื่อเป็นแรงบันดาลใจ
โปรดทราบว่าความละเอียดของโหมดข้อความค่อนข้างต่ำ หน้าต่างเทอร์มินัลมาตรฐานที่มีความกว้างเพียง 80 ตัวอักษร และคุณไม่สามารถมีความกว้างเกินกว่า 200-300 ตัวอักษรได้ ดังนั้นการปัดเศษที่ถูกต้องจึงเป็นสิ่งสำคัญ
หากเป็นเพียงรูปสี่เหลี่ยมผืนผ้า การใส่สิ่งต่อไปนี้ในวิธีการระบายสีของคุณควรได้ผล...
int xIncrement = (int)g.getFont().getStringBounds("*", null).getWidth();
int yIncrement = (int)g.getFont().getStringBounds("*", null).getHeight();
for(int i = y; i < y + height; i += xIncrement)
for(int j = x; j < x + width; j += yIncrement)
g.drawString("*", j, i);
สำหรับสามเหลี่ยมและรูปร่างอื่นๆ อาจจะยากกว่าเล็กน้อย แต่คุณสามารถหาความชันของเส้นที่แยกจุดต่างๆ ได้ แล้วจึงได้ค่า x เริ่มต้นสำหรับแต่ละบรรทัด
โดยทั่วไปควรพยายามหลีกเลี่ยง 'การวาดดาว'...
พิกัด Y อาจเป็นจำนวนบรรทัดที่คุณต้อง 'ข้าม' เว้นแต่คุณจะอ้างถึง GUI และพิกัด x คล้ายกับจำนวนช่องว่างที่คุณป้อนในบรรทัด
โดยพื้นฐานแล้ว x = 2 และ y = 3 หมายความว่าคุณจะต้องลงไป 3 บรรทัดและเลื่อน 2 ช่องไปทางขวา
ด้านล่างนี้มาจาก javadoc
x - พิกัด x ใหม่สำหรับมุมซ้ายบนของสี่เหลี่ยมผืนผ้านี้ y - พิกัด y ใหม่สำหรับมุมซ้ายบนของสี่เหลี่ยมผืนผ้านี้