แนวคิดเบื้องหลังการกำหนดสี่เหลี่ยมสองจุดคืออะไร [ปิด]


14

ไม่ใช่ว่ามันไม่เข้าท่า แต่มันก็ใช้งานได้อย่างน่าอึดอัดใจ 99% ของเวลา

บ่อยครั้งในสี่เหลี่ยมกราฟิกสองมิติจะเริ่มต้นจัดเก็บและจัดการเป็นจุดคู่ ในภาษาใดไม่มี

class Rect:
   p1, p2: point

มันสมเหตุสมผลกว่าที่จะกำหนดรูปสี่เหลี่ยมผืนผ้าเป็นค่า x สองค่าและค่า y สองค่าดังนี้:

class Rect
   xleft, xright: int
   ytop, ybottom: int

ด้วยจุดสองจุดหากบางจุดในซอร์สโค้ดคุณต้องการใช้ประโยชน์จากค่า y ของอันดับต้นสุดคุณต้องบอกว่า rect.p1.y (hmmm หยุดและคิดว่ามันคือ p1 หรือ p2) แต่ ด้วยค่าสี่ค่าในฐานะสมาชิกข้อมูลธรรมดามันชัดเจนและตรงไปตรงมา: rect.ytop (ไม่ต้องคิด!) การใช้สองจุดหมายความว่าในการจัดการกับแนวตั้งคุณต้องยุ่งเหยิงในแนวนอน มีความสัมพันธ์ภายนอกระหว่างองค์ประกอบอิสระ

แนวคิดสองจุดนี้เกิดขึ้นได้อย่างไรและทำไมมันถึงยังคงอยู่? มันมีประโยชน์มากกว่าพิกัด x และ y ที่เปลือยเปล่าหรือไม่?

เพิ่มหมายเหตุ: คำถามนี้อยู่ในบริบทของรูปสี่เหลี่ยมชิด XY เช่นในตัวจัดการ windows และชุดเครื่องมือ GUI ไม่ใช่ในบริบทของรูปร่างที่กำหนดเองในแอพการวาดและการวาดภาพ


8
คุณเขียนโค้ดจำนวนมากโดยใช้ Rects หรือไม่

6
สี่เหลี่ยมถูกกำหนดโดยสองจุดดังนั้นการแทนค่าเป็นสองจุดจึงสมเหตุสมผล
Adam Crossland

2
สี่เหลี่ยมถูกกำหนดโดยธรรมชาติให้เป็นช่วงของค่า x และช่วงของค่า y
DarenW

2
เป็นคำถามที่ดีมาก! ฉันไม่เคยคิดเกี่ยวกับมันด้วยตัวเอง แต่คุณโต้เถียงที่น่าสนใจ! FWIW, Windows มีRECTเหมือนที่คุณอธิบายด้วย (บน, ซ้าย, ล่าง, ขวา)
Dean Harding

3
คุณจะกำหนดสี่เหลี่ยมที่มีสองจุดได้อย่างไร มันสันนิษฐานว่าไม่มีการหมุนหรือไม่?
Nick T

คำตอบ:


8

คุณได้พิจารณาแล้วว่าเป็นข้อผิดพลาดน้อยที่จะเกิดขึ้นหรือไม่?

หากคุณใช้ (Point1, Point2) มันจะชัดเจนมากในสิ่งที่คุณกำลังระบุ หากคุณให้ 2 คะแนนข้อผิดพลาดที่เป็นไปได้เพียงอย่างเดียวคือผู้ใช้ผสม x และ y ของพวกเขาเมื่อสร้างคะแนนตามลำดับของคะแนนไม่สำคัญ

หากคุณให้จำนวนเต็ม 4 จำนวนถ้ามีใครไม่สนใจพวกเขาอาจให้ (x1, x2, y1, y2) เมื่อคุณต้องการ (x1, y1, x2, y2) หรือในทางกลับกัน นอกจากนี้ API บางตัวเช่นโครงสร้างRectของ WCF กำหนดสี่เหลี่ยมผืนผ้าเป็น (x, y, ความกว้างความสูง) ซึ่งอาจทำให้เกิดความสับสนกับสิ่งที่ (1, 2, 3, 4) หมายถึง นั่นคือ (x, y, w, h) หรือ (x1, y1, x2, y2) หรือ (x1, x2, y1, y2) หรือไม่

สรุปทั้งหมด (จุดที่ 1, จุดที่ 2) ดูเหมือนว่าปลอดภัยกว่าสำหรับฉันเล็กน้อย


3
แล้วอะไรอย่างเช่น Rect (xrange (x1, x2), yrange (y1, y2))? นั่นเป็นสุดยอดของความปลอดภัยและความสง่างามในการใช้งาน API
DarenW

9

ฉันชอบกำหนดสี่เหลี่ยมเป็นจุด + ความกว้างและความสูงเสมอโดยที่จุดนั้นเป็นมุมซ้ายบนของสี่เหลี่ยม

class Rect {
  float x, y;
  float width, height;
}

จากนั้นเพิ่มวิธีการใด ๆ ที่คุณต้องการเพื่อดึงข้อมูลเมตริกอื่น ๆ เช่นเดียวกับรุ่นJava


4
ค่า y + ส่วนสูง, y-height หรือแค่ y?
Cameron MacFarland

2
@Cameron MacFarland: ขึ้นอยู่กับระบบพิกัดของแอปพลิเคชันซึ่งไม่ต้องกังวลกับรูปสี่เหลี่ยมผืนผ้าที่ต่ำ
Jon Purdy

2
@ Martin Wickman: อะไรคือข้อดีของการใช้ 2 คะแนน?
Kramii

@ Kramii: ข้อดีอย่างหนึ่งก็คือต้องแปลเพียงจุดเดียวถ้าคุณย้าย rect ทั้งหมด แม้ว่าคุณจะสามารถคำนวณ "จุดที่หายไป" ได้ตลอดเวลาหากคุณต้องการ (cpu / memory tradeoff)
Martin Wickman

สิ่งนี้จะปรากฏในชีวิตจริงด้วย ฉันพบว่ามันยุ่งยากหากสิ่งหนึ่งที่พบได้บ่อยที่สุดที่ฉันทำกับสี่เหลี่ยมคือการทดสอบว่ามีจุดใดจุดหนึ่งอยู่ภายใน การวาดเป็นเรื่องธรรมดา ในทั้งสองกรณีต้องมีการเพิ่มซึ่งรบกวนวงจรนาฬิกาที่มีประสิทธิภาพสูงเช่นฉัน
DarenW

7

ที่จริงแล้ว rectagle ไม่ได้ถูกกำหนดโดย 2 คะแนน สี่เหลี่ยมสามารถกำหนดได้สองจุดเท่านั้นหากมันขนานกับแกน

มีหลายวิธีในการแสดงรูปสี่เหลี่ยมผืนผ้าที่ขนานกับแกน:

  1. สองจุดตรงข้ามในแนวทแยงมุม
  2. มุมหนึ่งจุดความสูงและความกว้าง
  3. จุดกึ่งกลางความสูงและความกว้างครึ่งหนึ่ง (ผิดปกติ แต่บางครั้งก็มีประโยชน์)
  4. ในฐานะที่เป็นสองพิกัด X และสองพิกัด Y

สำหรับ (1), ไลบรารีจำนวนมากใช้การประชุมเพื่อกำหนดจุดสองจุดที่ใช้เช่น topLeft และ bottomRight

ทางเลือกของการแสดงอาจจะขับเคลื่อนด้วยวัตถุประสงค์เดิมของการกำหนดรูปสี่เหลี่ยมผืนผ้า แต่ฉันคิดว่ามันมักจะโดยพลการ การรับรองจะเทียบเท่าในข้อมูลที่พวกเขาดำเนินการ พวกเขาทำอย่างไรแตกต่างกันในความสะดวกที่มีคุณสมบัติของสี่เหลี่ยมอาจคำนวณและความสะดวกสบายที่สามารถดำเนินการใน reectangle

ประโยชน์ของคำนิยาม (1) มากกว่าคำอื่น ๆ ได้แก่ :

  • ความสอดคล้องของ API กับรูปหลายเหลี่ยมอื่น ๆ บรรทัดเป็นต้น
  • topLeft, bottomRight สามารถส่งต่อไปยังวิธีการใดก็ได้ที่รับคะแนน
  • เมธอดของคลาส Point สามารถเรียกใช้บน topLeft, bottomRight
  • คุณสมบัติส่วนใหญ่สามารถหาได้ง่ายเช่น ด้านล่างซ้าย, ด้านบนขวา, ความกว้าง, ความสูง, ศูนย์กลาง, ความยาวแนวทแยง, ฯลฯ

6

ทีนี้p1: Pointและp2: Pointแต่ละคนจะมีพิกัดสองintพิกัดในนั้นแล้วชั้นเรียนของคุณจะไม่เหมือนกันหรือไม่?

และถ้าคุณเก็บจุดสองจุดนั้นเป็นPointวัตถุชั้นหนึ่งคุณจะไม่ได้รับประโยชน์เพิ่มขึ้นอีกนิดหรือ ในระบบพิกัดกราฟิกส่วนใหญ่ที่ฉันรู้ว่าคะแนนถูกแบ่งเป็นคลาสย่อยด้วยวิธีนี้เพื่อสร้างลำดับชั้นของวัตถุ: point -> circle -> ellipseและอื่น ๆ

ดังนั้นหากคุณสร้างวัตถุที่ไม่ได้ใช้Pointคลาสคุณจะต้องแยกวัตถุนั้นออกจากลำดับชั้นของส่วนที่เหลือ


1
ข้อได้เปรียบที่ฉันเห็นจากการเป็นตัวแทนของ OP คือถ้าคุณต้องการทราบค่า y ที่ต่ำกว่าของสี่เหลี่ยมผืนผ้าคุณรู้ว่ามันคือ "ybottom" ซึ่งเหมือนกับ p1 / p2 คุณต้องหาว่าอันไหนที่ต่ำกว่า นี่คือถ้าคุณรับประกัน p1 จะเป็นค่าที่ต่ำกว่า
Jason Viers

1
ในขณะที่มันเป็นจริงทั้งสองโครงสร้างที่แตกต่างกันทั้งสองเดือดลงไปถึงสี่พิกัดรุ่นสองจุดแนะนำระดับภายนอกที่รวบรวมหนึ่ง x และหนึ่ง y ไม่มีเหตุผลใดที่ x ไปด้วยที่ y ฉันไม่เห็นระดับพิเศษนี้เป็นการให้โปรแกรมอรรถประโยชน์ใด ๆ หลังจากเขียนโปรแกรมกราฟิกเป็นเวลาหลายปี
DarenW

1
@ Jason: จุดดี ด้วยการytop/ ybottomแนวทางแม้ว่าจะมียังจะต้องมีบางรับประกันว่าเป็นจริงดังต่อไปนี้ybottom ytop
Dr. Wily's Apprentice

หรือโทร 'em y1 และ y2 และใช้ min (y1, y2) และ max (y1, y2) - ซึ่งแน่นอนว่าจะน่าเบื่อกว่าการเข้าถึงผ่านจุดสองจุด p1, p2
DarenW

การตั้งชื่อของด้านบน / ล่างไม่ได้ช่วยอะไรคุณเลยเพราะไม่มีอะไรป้องกัน bottomx <topx เว้นแต่ว่าคุณใช้รหัสสำหรับมันโดยเฉพาะ ฉันคิดว่ามันจะเพิ่มความสับสน
lkg

5

นี่คือเหตุผลที่ผมชอบของ TRectDelphi มันถูกกำหนดเป็นเรคคอร์ดชุดตัวเลือก (โครงสร้างยูเนี่ยนใน C-speak) ที่สามารถตีความได้ว่าเป็น TopLeft และจุด BottomRight หรือจำนวนเต็มยอดซ้ายซ้ายล่างและขวาแล้วแต่จำนวนใดจะสะดวกกว่าในขณะนี้


1
ใช่คุณสมบัติที่มีประโยชน์มากที่
Orbling

4

แน่นอนถ้าคุณกำหนดสี่เหลี่ยมผืนผ้าของคุณเป็น:

class Rect
{
    Point bottomLeft;
    Point topRight;
}

แล้วคุณจะรู้ได้ทันทีว่าจุดไหนเป็นจุดไหน

ยิ่งไปกว่านั้นคือการเพิ่มคุณสมบัติพิเศษที่ช่วยให้คุณสามารถจัดการสี่เหลี่ยมที่คุณต้องการใช้กับแอปพลิเคชันของคุณ สิ่งเหล่านี้จะอัพเดทโครงสร้างข้อมูลพื้นฐาน

โดยการเพิ่มการแปลงรูปร่างคุณสามารถปรับทิศทางสี่เหลี่ยมผืนผ้าของคุณในแบบที่คุณต้องการ คุณยังคงต้องใช้กล่องจัดแนวแกนเพื่อให้สามารถตรวจสอบการยอมรับ / ปฏิเสธได้อย่างรวดเร็ว

อย่างไรก็ตามหากโมเดลของคุณอนุญาตให้ใช้รูปสี่เหลี่ยมผืนผ้าในทิศทางใดก็ได้โดยไม่ต้องใช้การแปลงดังนั้น "ล่างซ้าย" และ "ขวาบน" ไม่มีความหมายซึ่งนำกลับไปที่ "p1" และ "p2" (หรือบางสิ่งที่เทียบเท่า)


จะเกิดอะไรขึ้นเมื่อคุณหมุนสี่เหลี่ยมผืนผ้า 90 องศา? ตอนนี้คุณกำลังติดตามสองจุดที่แตกต่างจากตอนแรกหรือตอนนี้ "topRight" ของคุณอยู่ทางด้านซ้ายของ "bottomLeft" หรือไม่?
Inaimathi

@Inaimathi - หากคุณเพิ่มเมทริกซ์การแปลงคุณสามารถทำให้สี่เหลี่ยมผืนผ้าอยู่ในแนวเดียวกันกับแกน อย่างไรก็ตามขึ้นอยู่กับแอปพลิเคชันของคุณ
ChrisF

2

ฉันคิดว่ามันสมเหตุสมผลกว่าสำหรับสี่เหลี่ยมที่จะแสดงด้วยขนาด x และ y และจุด; คุณสามารถทำให้จุดที่ตั้งเป็นจุดศูนย์กลางของสี่เหลี่ยมผืนผ้าเพื่อให้เป็นอิสระจากการหมุน

แต่มันอาจจะง่ายที่สุดในการเขียนโค้ดเป็นสองจุด!


การเขียนโค้ดเป็นสองคะแนนจะง่ายขึ้นอย่างไร
DarenW

@DaremW: ฟังก์ชั่นห้องสมุดวาดรูปสี่เหลี่ยมผืนผ้าทั่วไปใช้จุดบนซ้ายและล่างขวาเป็นอาร์กิวเมนต์
Steven A. Lowe

แต่ทำไม API เหล่านั้นจึงถูกออกแบบมา นอกเหนือจากการเลียนแบบห้องสมุดก่อนหน้านี้อย่างไร้เหตุผลนั่นคือ
DarenW

@ DarenW: ฉันเดาว่าห้องสมุดจะใช้รูทีนการวาดเส้น Bresenham ซึ่งใช้สองจุดเป็นอินพุตและมีประสิทธิภาพมาก
Steven A. Lowe

2

ฉันไม่ชอบเพราะเราโยนระดับความเป็นอิสระที่มีศักยภาพซึ่งช่วยให้สามารถหมุนได้ตามอำเภอใจ สี่เหลี่ยมผืนผ้า 2D ทั่วไปมีห้านิรนาม (องศาอิสระ) เราสามารถระบุให้มันเป็นพิกัดของจุดความยาวของทั้งสองด้านที่เป็นจุดสุดยอดด้วยจุดนี้และมุมจากแนวนอนของบรรทัดแรก (อีกอันหนึ่งสมมติว่ามีมุม 90 องศาที่มากกว่า) สามารถใช้ความเป็นไปได้อื่น ๆ ได้ไม่ จำกัด จำนวน แต่มีปริมาณอิสระห้าตัวที่ต้องระบุ ตัวเลือกบางอย่างจะนำไปสู่พีชคณิตง่ายกว่าตัวเลือกอื่นขึ้นอยู่กับสิ่งที่ทำกับพวกเขา


5
สิ่งสำคัญคือต้องตระหนักว่าโครงสร้างสี่เหลี่ยมผืนผ้า "มาตรฐาน" ไม่ใช่สี่เหลี่ยมผืนผ้าทางคณิตศาสตร์ที่กำหนดไว้อย่างเข้มงวด แต่เวอร์ชันที่เรียบง่ายซึ่งขนานกับแกน X และ Y เสมอเพราะมันถูกสร้างขึ้นเพื่อใช้กับสิ่งที่เฉพาะเจาะจงอย่างหนึ่ง: การกำหนดขอบเขตสี่เหลี่ยมผืนผ้า สำหรับตัวจัดการหน้าต่างซึ่งเกือบจะขนานกับแกน X และ Y เสมอ
Mason Wheeler

+1, โครงสร้างด้านซ้าย / ขวา / บน / ล่างถูกกำหนดไว้ล่วงหน้าและดังนั้นจึงมีข้อมูลน้อยลง
Javier

จุดที่ดีประมาณสี่เหลี่ยมชิด xy ฉันจำได้ว่าและยังมีขอบเขตที่ใช้ในการสร้างแบบจำลอง 3 มิติและสิ่งอื่น ๆ แต่การจัดตำแหน่ง xy (อาจ -z-z) ทั้งหมด
DarenW

1

นั่นไม่ใช่สิ่งเดียวกันกับ 2 คะแนนใช่มั้ย สิ่งนี้เป็นสิ่งที่น่าอึดอัดใจอย่างไร ... การวาดภาพส่วนใหญ่ต้องการคะแนนไม่ใช่แยกส่วนประกอบ x / y


1

การกำหนดรูปสี่เหลี่ยมผืนผ้าเป็นจุดคู่ช่วยให้คุณสามารถนำจุดนั้นกลับมาใช้เป็นจุดสุดยอดสำหรับรูปร่างอื่นได้ แค่คิด ...


แต่ดูเหมือนว่าจะเล่นกับครึ่งดาดฟ้าเพื่อให้เพียงสองคะแนนเพื่อกำหนดรูปร่างสี่มุม หากคุณต้องการใช้มุมบนซ้ายสุดเท่ห์ แต่ถ้าคุณต้องการมุมขวาด้านบนคุณต้องทำข้อมูลที่น่าสนใจและค่อนข้างพูดได้
DarenW

ถ้ามี accessor ที่กำหนดเป็น point AX point BY และ point BX point AY มันจะทำให้มันเบาลงในหน่วยความจำ / บนดิสก์ผมคิดว่าจะเก็บจุดยอดได้ครึ่งหนึ่งและชี้ไปที่พวกมัน (ขึ้นอยู่กับขนาดกริดสูงสุด) ฉันจะไปถึงที่ที่คุณคิดว่าเป็นช่วง แต่คุณไม่ได้เล่นครึ่งเด็คคุณแค่ไม่ได้เก็บข้อมูลที่ซ้ำกัน .... และจุดอื่น ๆ ที่ต้องทำคือข้อ จำกัด หน่วยความจำคืออะไร? สิ่งที่มีความหมายอีกครั้งการดำเนินการปรับแต่ง rects ในรหัสเชื่อมต่อทั้งหมด
RobotHumans

และเนื่องจากคุณไม่ต้องทำ "งาน" ใด ๆ เพื่อดึงจุดสุดยอดสองอันแรกออกจากหน่วยความจำมันอาจเร็วกว่า
RobotHumans

1

ฉันเชื่อว่าส่วนใหญ่จะสร้างความเท่าเทียมกันระหว่างรูปทรงดั้งเดิมทั้งหมด

แน่ใจว่าคุณสามารถกำหนดรูปสี่เหลี่ยมผืนผ้าได้หลายวิธี แต่คุณจะกำหนดรูปสามเหลี่ยมหรือรูปดาวหรือวงกลมในวิธีที่สามารถใช้โครงสร้างข้อมูลที่คล้ายกันได้อย่างไร

รูปหลายเหลี่ยมทั้งหมดสามารถกำหนดโดยจุดของพวกเขาด้วยตรรกะจำนวนสั้น ๆ เพื่อกำหนดสิ่งที่จะทำกับจุด

ไลบรารีกราฟิกส่วนใหญ่ทำงานกับรูปหลายเหลี่ยมเหล่านี้ในแง่ของจุดยอดและขอบดังนั้นจุดและเส้นแบ่งระหว่างกันการคำนวณทั้งหมดใช้งานได้กับคุณสมบัติทั้งสองนี้ทั้งที่และ facets แต่ตัวมันเองเป็นเพียงฟังก์ชันของขอบ


1

ในสองมิติการจัดเก็บสี่เหลี่ยมเนื่องจากจุดสองจุดนั้นชัดเจนกว่าการกำหนดมุมเฉพาะและความกว้างและความสูง - พิจารณาความกว้างหรือความสูงติดลบหรือการคำนวณที่จำเป็นเพื่อกำหนดแต่ละตัวเลือกจากอีกมุมหนึ่ง

การทำการหมุนบนสี่เหลี่ยมที่กำหนดโดยจุดก็ง่ายกว่าที่กำหนดด้วยจุดบวกความกว้างและความสูง

ฉันคาดว่าการห่อหุ้มจะทำให้ความแตกต่างนี้ไม่สำคัญในฐานะผู้ใช้ของชั้นเรียน

ควรกำหนดสี่เหลี่ยมเป็นสามจุดเพื่อกำหนดให้ดีใน 3 มิติ ฉันไม่แน่ใจว่าข้อกำหนดทั้งหมดสำหรับการกำหนดรูปสี่เหลี่ยมผืนผ้าใน 4 มิติขึ้นไป


1

มันไม่มีข้อ จำกัด คุณต้องการข้อมูลสี่ชิ้นเพื่อวาดรูปสี่เหลี่ยมผืนผ้า ผู้ออกแบบห้องสมุดตัดสินใจที่จะแสดงด้วยสองจุด (แต่ละจุดมีพิกัด xy) แต่สามารถทำได้ด้วย x / y / w / h หรือบน / ล่าง / ซ้าย / ขวา

ฉันคิดว่าคำถามที่แท้จริงของ OP คือ: เหตุใดตัวเลือกนี้จึงถูกสร้างขึ้น


1

การเลือกพารามิเตอร์มีความสำคัญต่อผู้ออกแบบ / ผู้เขียนระดับต่ำเท่านั้น

ผู้ใช้ระดับสูงจำเป็นต้องคิดถึง:

  • IsPointInRect
  • พื้นที่
  • ทางแยก (หรือรูปวาด)
  • HasOverlap (เหมือนกับ Intersection.Area> 0)
  • Union (กลายเป็นรายการของรูปสี่เหลี่ยม)
  • การลบ (รายการของสี่เหลี่ยมที่เป็นตัวแทนของชุดจุดเดียวกันที่อยู่ใน rect A แต่ไม่ได้อยู่ใน rect B)
  • แปลง
    • เลื่อนเป็น X และ Y
    • การหมุน (0, 90, 180, 270)
    • ปรับสัดส่วนใน X และ Y (ดูหมายเหตุ)
  • ไวยากรณ์แบบง่ายสำหรับคุณสมบัติ Xmin, Xmax, Ymin, Ymax, Width, Height เพื่อให้ผู้ใช้ไม่จำเป็นต้องทราบทางเลือกที่แน่นอนของพารามิเตอร์

หมายเหตุ: เพื่อลดการสูญเสียความแม่นยำในระหว่างการแปลงสเกลบางครั้งมันก็เหมาะสมที่จะใช้คลาส Rect ที่สองที่ใช้พิกัดทศนิยมจุดเพื่อให้ผลกลางสามารถเก็บไว้อย่างถูกต้องในลำดับของการแปลงและปัดเป็นจำนวนเต็มใน ขั้นตอนสุดท้าย.


0

ตามที่ @Steven บอกว่าฉันคิดว่ามันควรจะเป็นในแง่ของหนึ่ง (x, y) จุดและเวกเตอร์ขนาด (w, h) นั่นเป็นเพราะมันง่ายที่จะตกอยู่ในความกำกวม สมมติว่าคุณมีสี่เหลี่ยมที่กรอกข้อมูลต่อไปนี้เริ่มต้นที่จุด (0,0)

  012
0 XXX
1 XXX
2 XXX

เห็นได้ชัดว่ามีความกว้างความสูง (3,3) แต่จุดที่สองคืออะไร มันเป็น (2,2) หรือ (3,3)?

ความคลุมเครือนี้อาจทำให้เกิดปัญหาทุกประเภท

ผมได้เรียนรู้อย่างหนักปีวิธีการที่ผ่านมาว่ามันจะดีกว่าที่จะคิดว่าพิกัดกราฟิกเป็นเส้นระหว่างพิกเซลไม่เป็นเส้นพิกเซลบน ด้วยวิธีนี้ไม่มีความกำกวม


2
QuickDraw ดั้งเดิมประจำบน Mac (อันจากยุค 80) ใช้แบบจำลองทางคณิตศาสตร์ที่มีขนาดเล็กมาก จุดบนหน้าจออยู่ระหว่างพิกเซล ดังนั้นการลากเส้นจาก (3,5) ถึง (10,5) จึงมีความยาว 7 และ 7 พิกเซล ในพิกัดของวันนี้เส้นนั้นจะมีความยาว 8
Barry Brown

@Barry: นั่นสมเหตุสมผลเพราะมันใช้แฮคเกอร์จำนวนมากและถ้าคุณคบเส้นด้วยกันคุณต้องการให้พวกเขาเชื่อมต่อโดยไม่ต้องมีพิกเซลขาดหายไปเมื่อพวกเขาพบกัน ฉันตีพิมพ์กระดาษ siggraph จริง ๆ ในการเติมรูปหลายเหลี่ยมโดยพิจารณาจากระบบพิกัดทั้งสอง
Mike Dunlavey

0
Pa(x,y)*-----------------------------------*Pb(x,y)
       |                                   |
       |                                   |
       |                                   |
       |                                   |
       |                                   |
       |                                   |
Pc(x,y)*-----------------------------------*Pd(x,y)

เราสามารถกำหนดทั้ง Pb และ Pc ดังนี้:

Pb (Pd (x), PA (y))

และ

คอมพิวเตอร์ (Pa (x), Pd (y))

ดังนั้นจึงไม่จำเป็นต้องกำหนดทั้งสี่จุดเนื่องจากสมมาตร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.