วาดรูปสี่เหลี่ยมผืนผ้า

ฉันกำลังเขียนโปรแกรมที่รับพิกัดจากผู้ใช้และวาดรูปทรงบางส่วนบนหน้าจอด้วยดาว(*)

เช่น สี่เหลี่ยมผืนผ้า เช่น สี่เหลี่ยมผืนผ้า = 100,150,50,50 เป็น x, y, ความกว้าง, ความสูง ฉันจะทำอย่างไร??


person Community    schedule 20.12.2010    source แหล่งที่มา
comment
ไม่ใช่แค่บนหน้าจอที่มีดวงดาวเท่านั้น   -  person    schedule 20.12.2010
comment
คุณสามารถระบุรูปร่างทั้งหมดที่คุณต้องการรองรับได้หรือไม่   -  person Matthew Cox    schedule 20.12.2010
comment
สี่เหลี่ยม สามเหลี่ยม และห้าเหลี่ยม..ผมจะยอมรับพิกัดจากผู้ใช้   -  person    schedule 20.12.2010
comment
คุณจะต้องมีคุณลักษณะที่แตกต่างกันสำหรับรูปร่างที่แตกต่างกันใช่ไหม ความกว้างและความสูงจะเพียงพอสำหรับสี่เหลี่ยมผืนผ้าเท่านั้น...   -  person Eternal Noob    schedule 20.12.2010
comment
ก่อนที่เราจะเจาะลึกแนวทางแก้ไขปัญหา มีอีกอย่างหนึ่งตามข้อมูลที่คุณให้ไว้ คุณจะใช้กลไกใดในการพิจารณาว่าคุณกำลังเผชิญกับรูปร่างประเภทใด หากพวกมันผ่านเฉพาะพิกัดเช่น (จุด[] เป็นต้น) แสดงว่าคุณตกอยู่ในฝันร้ายในการกำหนดรูปร่าง   -  person Matthew Cox    schedule 20.12.2010
comment
แต่ฉันต้องการจุดเริ่มต้น x และ y ด้วย   -  person    schedule 20.12.2010
comment
ฉันควรทำด้วย for loops ใช่ไหม?   -  person    schedule 20.12.2010
comment
มีวิธีอื่นทำมั้ย??   -  person    schedule 20.12.2010
comment
มันมีกลิ่นของการบ้าน ดังนั้นหากเป็นเช่นนั้นกรุณาแท็กให้เหมาะสม ปัญหาที่ต้องแก้ไข: สร้างกลไกในการทราบประเภทของรูปร่างที่คุณกำลังจัดการ วิธีแก้ปัญหาที่ดีจะช่วยแก้ปัญหาสำหรับแอตทริบิวต์ที่จะส่งผ่านเข้ามา เริ่มต้นด้วยคลาสรูปร่างพื้นฐาน จากนั้นดูที่การขยายผ่านองค์ประกอบหรือการสืบทอดเมื่อจำเป็น เมื่อคุณทำสิ่งนี้กับรูปร่างทั้งหมดของคุณแล้ว ถ้าอย่างนั้นคุณก็พร้อมสำหรับคำถามเดิมว่าจะเรนเดอร์โดยใช้เครื่องหมายดอกจันได้อย่างไร   -  person Matthew Cox    schedule 20.12.2010
comment
เขียนโปรแกรมที่จะวาดภาพบนหน้าจอตามพารามิเตอร์ โปรแกรมจะมี 5 ตัวเลือก จะยอมรับพิกัดสำหรับรูปร่างประเภทต่อไปนี้ i. สี่เหลี่ยมผืนผ้า เช่น สี่เหลี่ยมผืนผ้า = 100,200,50,50 เป็น x, y, ความกว้าง, ความสูง ii สามเหลี่ยม เช่น สามเหลี่ยม = 100,200,50,50,60,60 เป็น x,y,x1,y1,x2,y2 iii สี่เหลี่ยมจัตุรัส เช่น สี่เหลี่ยมจัตุรัส = 100,200,50 เป็น x, y, ความยาว iv เพนตากอน เช่น เพนตากอน=100,200,50,50,60,60 เป็น x,y,x1,y1,x2,y2,x3,y3,x4,y4 b. ออก   -  person    schedule 20.12.2010
comment
อาจเป็นพิกัดของจุดที่สี่เหลี่ยมผืนผ้าอยู่   -  person Aravind Yarram    schedule 21.12.2010
comment
โปรดอธิบายคำถามของคุณให้ดีขึ้นเพื่อให้เราสามารถช่วยเหลือคุณได้   -  person moinudin    schedule 21.12.2010
comment
โปรดอย่าถามคำถามนี้อีกเพียงเพราะคุณไม่พอใจกับคำตอบที่ได้รับ คุณสามารถแก้ไขคำถามของคุณเพื่อชี้แจงได้ คุณยังสามารถเสนอเงินรางวัลได้   -  person    schedule 22.12.2010


คำตอบ (5)


ฉันคิดว่าบทช่วยสอนนี้มีประโยชน์มากสำหรับคุณ: http://download.oracle.com/javase/tutorial/2d/geometry/primitives.html

person AlexR    schedule 20.12.2010
comment
ขอบคุณอเล็กซ์ แต่ฉันจะไม่ใช้ GUI ฉันจะวาดรูปทรงโดยใช้ for loops - person ; 20.12.2010

'การวาดภาพด้วยดาว' คืออะไร? หากเป็นโหมดข้อความที่มีแบบอักษรเว้นวรรค คุณจะต้องพิมพ์เป็นรูปดาวเป็นเส้นแนวนอน เพื่อคำนวณความยาวที่เหมาะสม สำหรับสี่เหลี่ยมนี่เป็นเรื่องง่าย สำหรับสามเหลี่ยม ง่ายน้อยกว่านิดหน่อย ห้าเหลี่ยมเป็นเพียงการรวมกันของสี่เหลี่ยมกับสามเหลี่ยมบางส่วน ดู อัลกอริทึม Bresenham เพื่อเป็นแรงบันดาลใจ

โปรดทราบว่าความละเอียดของโหมดข้อความค่อนข้างต่ำ หน้าต่างเทอร์มินัลมาตรฐานที่มีความกว้างเพียง 80 ตัวอักษร และคุณไม่สามารถมีความกว้างเกินกว่า 200-300 ตัวอักษรได้ ดังนั้นการปัดเศษที่ถูกต้องจึงเป็นสิ่งสำคัญ

person 9000    schedule 20.12.2010
comment
รูปห้าเหลี่ยมไม่ใช่เรื่องยากนักที่จะแยกย่อยออกเป็นชิ้นๆ ง่ายๆ: !สามเหลี่ยม 4 รูปและสี่เหลี่ยมผืนผ้า - person 9000; 20.12.2010

หากเป็นเพียงรูปสี่เหลี่ยมผืนผ้า การใส่สิ่งต่อไปนี้ในวิธีการระบายสีของคุณควรได้ผล...

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 เริ่มต้นสำหรับแต่ละบรรทัด

โดยทั่วไปควรพยายามหลีกเลี่ยง 'การวาดดาว'...

person hauntsaninja    schedule 20.12.2010

พิกัด Y อาจเป็นจำนวนบรรทัดที่คุณต้อง 'ข้าม' เว้นแต่คุณจะอ้างถึง GUI และพิกัด x คล้ายกับจำนวนช่องว่างที่คุณป้อนในบรรทัด

โดยพื้นฐานแล้ว x = 2 และ y = 3 หมายความว่าคุณจะต้องลงไป 3 บรรทัดและเลื่อน 2 ช่องไปทางขวา

person npinti    schedule 21.12.2010

ด้านล่างนี้มาจาก javadoc

x - พิกัด x ใหม่สำหรับมุมซ้ายบนของสี่เหลี่ยมผืนผ้านี้ y - พิกัด y ใหม่สำหรับมุมซ้ายบนของสี่เหลี่ยมผืนผ้านี้

person Aravind Yarram    schedule 21.12.2010