การคาดเดาของคุณถูกต้อง การตรวจสอบความสมมาตรเป็นความคิดที่ดี: ความโค้ง (เกาส์เซียน) เป็นคุณสมบัติที่แท้จริงของพื้นผิว ดังนั้นการหมุนกริดไม่ควรเปลี่ยน อย่างไรก็ตามการหมุนแนะนำข้อผิดพลาด discretization - ยกเว้นการหมุนด้วยทวีคูณ 90 องศา ดังนั้นการหมุนใด ๆ ดังกล่าวควรรักษาความโค้ง
เราสามารถเข้าใจได้ว่าเกิดอะไรขึ้นโดยการใช้ประโยชน์จากแนวคิดแรกของแคลคูลัสที่แตกต่างกัน: อนุพันธ์คือขีด จำกัด ของผลต่างของผลต่าง นั่นคือทั้งหมดที่เราต้องรู้
dxx
ควรจะเป็นการประมาณที่ไม่ต่อเนื่องสำหรับอนุพันธ์อันดับสองในทิศทาง x การประมาณแบบพิเศษนี้ (คำนวณจากจำนวนที่เป็นไปได้) คำนวณโดยการสุ่มตัวอย่างพื้นผิวตามแนวขวางตัดขวางผ่านเซลล์ ค้นหาเซลล์ส่วนกลางที่แถว 2 และคอลัมน์ 2 เขียน (2,2) การตัดผ่านผ่านเซลล์ที่ (1,2) (2,2) และ (3,2)
ตาม transect นี้อนุพันธ์อันดับแรกจะถูกประมาณด้วยผลต่างของผลคูณ (* x32- * x22) / L และ (* x22- * x12) / L โดยที่ L คือระยะห่างระหว่างเซลล์ (ทั่วไป) (เห็นได้ชัดเท่ากับcellSizeAvg
) อนุพันธ์อันดับสองนั้นได้มาจากผลต่างของผลคูณหาร
dxx = ((*x32-*x22)/L - (*x22-*x12)/L)/L
= (*x32 - 2 * *x22 + *x12) / L^2.
สังเกตการหารโดย L ^ 2!
ในทำนองเดียวกันdyy
เป็นที่ควรจะเป็นประมาณไม่ต่อเนื่องของอนุพันธ์บางส่วนที่สองในปีทิศทาง การตัดขวางเป็นแนวดิ่งผ่านเซลล์ที่ (2,1), (2,2) และ (2,3) สูตรจะมีลักษณะเช่นเดียวกับที่ใช้dxx
กับ แต่ตัวห้อยถูกย้าย นั่นจะเป็นสูตรที่สามในคำถาม - แต่คุณยังต้องหารด้วย L ^ 2
อนุพันธ์อันดับสองบางส่วนที่ผสมกันdxy
สามารถประมาณได้โดยแยกความแตกต่างของสองเซลล์ออกจากกัน เช่นอนุพันธ์อันดับแรกที่เกี่ยวกับ x ที่เซลล์ (2,3) (เซลล์กลางด้านบนไม่ใช่เซลล์กลาง!) สามารถประมาณได้โดยการลบค่าทางซ้าย * x13 จากค่าที่อยู่ทางขวา * x33 และหารด้วยระยะห่างระหว่างเซลล์เหล่านั้น 2L อนุพันธ์อันดับแรกที่เกี่ยวกับ x ที่เซลล์ (2,1) (เซลล์กลางด้านล่าง) ประมาณโดย (* x31 - * x11) / (2L) ความแตกต่างของพวกเขาหารด้วย 2Lประมาณส่วนที่ผสมกันให้
dxy = ((*x33 - *x13)/(2L) - (*x31 - *x11)/(2L))/(2L)
= (*x33 - *x13 - *x31 + *x11) / (4 L^2).
ฉันไม่แน่ใจจริงๆว่าความโค้ง "รวม" หมายถึงอะไร แต่อาจเป็นเพราะความโค้งแบบเกาส์เซียน (ซึ่งเป็นผลิตภัณฑ์ของความโค้งหลัก) ตามMeek & Walton 2000 , Equation 2.4, ความโค้งแบบเกาส์เซียนนั้นได้มาจากการหาร dxx * dyy - dxy ^ 2 (สังเกตเครื่องหมายลบ! - นี่คือดีเทอร์มีแนนต์ ) โดยสแควร์ของบรรทัดฐานของความชันของพื้นผิว ดังนั้นค่าส่งคืนที่ยกมาในคำถามนั้นไม่ได้เป็นความโค้ง แต่ดูเหมือนว่าการแสดงออกบางส่วนที่ยุ่งเหยิงสำหรับความโค้งแบบเกาส์เซียน
เราพบว่าหกข้อผิดพลาดในรหัสส่วนใหญ่มีความสำคัญ:
dxx ต้องหารด้วย L ^ 2 ไม่ใช่ 1
สีย้อมจะต้องหารด้วย L ^ 2 ไม่ใช่ 1
สัญลักษณ์ของ dxy ไม่ถูกต้อง (สิ่งนี้ไม่มีผลกับสูตรความโค้ง)
สูตรสำหรับ dyy และ dxy ผสมกันตามที่คุณทราบ
เครื่องหมายลบหายไปจากคำหนึ่งในค่าส่งคืน
มันไม่ได้คำนวณความโค้ง แต่เป็นเพียงตัวเศษของการแสดงออกเชิงเหตุผลสำหรับความโค้ง
เป็นการตรวจสอบที่ง่ายมากมาตรวจสอบว่าสูตรที่แก้ไขแล้วส่งคืนค่าที่เหมาะสมสำหรับตำแหน่งแนวนอนบนพื้นผิวกำลังสอง การใช้ตำแหน่งดังกล่าวเป็นจุดกำเนิดของระบบพิกัดและการยกระดับให้อยู่ที่ความสูงเป็นศูนย์พื้นผิวดังกล่าวทั้งหมดจะมีสมการของรูปแบบ
elevation = a*x^2 + 2b*x*y + c*y^2.
สำหรับค่าคงที่ a, b และ c ด้วยจตุรัสกลางที่พิกัด (0,0), หนึ่งทางด้านซ้ายมีพิกัด (-L, 0), ฯลฯ ระดับความสูงเก้าระดับคือ
*x13 *x23 *x33 (a-2b+c)L^2, (c)L^2, (a+2b+c)L^2
*x12 *x22 *x32 = (a)L^2, 0, (a)L^2
*x11 *x21 *x31 (a+2b+c)L^2, (c)L^2, (a-2b+c)L^2
ดังนั้นโดยสูตรดัดแปลง
dxx = (a*L^2 - 2*0 + a*L^2) / L^2
= 2a;
dxy = ((a+2b+c)L^2 - (a-2b+c)L^2 - (a-2b+c)L^2 + (a+2b+c)L^2)/(4L^2)
= 2b;
dyy = ... [computed as in dxx] ... = 2c.
ความโค้งประมาณเป็น 2a * 2c - (2b) ^ 2 = 4 (ac - b ^ 2) (ตัวส่วนในสูตร Meek & Walton เป็นหนึ่งในกรณีนี้) สิ่งนี้สมเหตุสมผลหรือไม่ ลองใช้ค่า a, b และ c ง่ายๆ
a = c = 1, b = 0 นี่คือพาราโบลาวงกลม ความโค้งแบบเกาส์เซียนควรเป็นค่าบวก ค่า 4 (ac-b ^ 2) เป็นค่าบวก (เท่ากับ 4)
a = c = 0, b = 1 นี่คือไฮเปอร์โบลินของหนึ่งแผ่น - อาน - ตัวอย่างมาตรฐานของพื้นผิวที่มีความโค้งเชิงลบ นั่นเอง 4 (ac-b ^ 2) = -4
a = 1, b = 0, c = -1 นี่คือสมการของไฮเพอร์โบลาอยด์อีกอันของแผ่นงานหนึ่ง (หมุนด้วย 45 องศา) อีกครั้ง 4 (ac-b ^ 2) = -4
a = 1, b = 0, c = 0 นี่คือพื้นผิวเรียบที่พับเป็นรูปโค้ง ตอนนี้ 4 (ac-b ^ 2) = 0: ความโค้งแบบเกาส์เซโร่ศูนย์ตรวจจับความเรียบของพื้นผิวนี้ได้อย่างถูกต้อง
หากคุณลองใช้รหัสในคำถามเกี่ยวกับตัวอย่างเหล่านี้คุณจะพบว่ามันได้รับค่าที่ผิดพลาดเสมอ