スポンサーリンク
改めてみると間違っていた気がするのでここに修正版を置く。
あと確認のためにBlenderのスクリプトを組んで確認した。
このd1,d2を、最初の②の式に代入する。
import bpy import mathutils
def _nearestLineLinePoints3_(A,B,C,D): AC = C-A n1 = B-A n1.normalize() n2 = D-C n2.normalize() AmC=A-C CmA=C-A ############################################### numerator = n2.dot(AmC) + n2.dot(n1) * ( n1.dot(CmA) / n1.dot(n1) ) denominator = n2.dot(n2) - n1.dot(n2)**2 / n1.dot(n1) d2 = numerator / denominator ############################################### numerator = n1.dot(CmA) + n1.dot(n2) * d2 denominator = n1.dot(n1) d1 = numerator / denominator ############################################### dn1 = n1 * d1 _PAB = A + dn1 dn2 = n2 * d2 _PCD = C + dn2 return _PAB,_PCD
A = mathutils.Vector((0.390268,-0.093855,-0.48373)) B = mathutils.Vector((-0.401277 ,0.95607,-0.045612)) C = mathutils.Vector((-0.475275 ,-0.448733 ,0.344921)) D = mathutils.Vector((0.231105 ,0.937974 ,-0.776157)) PAB = mathutils.Vector((0,0,0)) PCD = mathutils.Vector((0,0,0)) ret = _nearestLineLinePoints3_(A,B,C,D) PAB = ret[0] PCD = ret[1]
############################################# print( PAB,PCD) #頂点定義 verts = [] verts.append( A ) verts.append( B ) verts.append( C ) verts.append( D ) verts.append( PAB ) verts.append( PCD ) #面を、それを構成する頂点番号で定義 edges =[] edges.append( [0,1] ) edges.append( [2,3] ) edges.append( [4,5] ) #頂点と頂点番号からメッシュを作成 mymesh = bpy.data.meshes.new("mymesh") mymesh.from_pydata(verts,edges,[]) #作成部分 mymesh.update() #オブジェクトを作成し、メッシュを登録 obj = bpy.data.objects.new("My_Object", mymesh) #オブジェクトのマテリアルを作成 mat = bpy.data.materials.new("Mat1") mat.diffuse_color = (0.3,0.7,0.5,1.0) obj.active_material = mat #オブジェクトを登録 bpy.context.scene.collection.objects.link(obj)